Node+Expres+jQuery+Ajax+Mysql+Template+Bootstrap.select制作 省-城市-县城三级联动功能

news/2024/7/11 1:27:54 标签: jquery, ajax, mysql, node.js

一、实现效果

province

二、核心点

mysql_4">1. node+express+mysql制作后端接口

mysql模拟数据: 中国城市sql可以自行从网上获取
<a class=mysql" />
测试接口:
1、获取省份接口:
province
2、根据省份获取对应城市接口:
city
3、根据城市获取县城区域接口:
area
入口app.js:

const express = require('express')
const app = express()
const path = require('path')
    // 配置跨域
const cors = require('cors')
app.use(cors())

// 导入三级城市联动路由
const cityrouter = require('./router/city')
app.use('/', cityrouter)

app.use(express.static(path.resolve(__dirname, "./")));

app.listen(8089, () => {
    console.log('services running at http://127.0.0.1:8089');
})

路由函数:

const express = require('express')
const router = express.Router()
// 城市列表三级联动
// 省
router.get('/province', (req, res) => {
        const sqlstr = 'select * from city where type = 1'
        db.query(sqlstr, (err, results) => {
            if (err) return res.send(err)

            res.send(results)
        })
    })
    // 市
router.get('/city', (req, res) => {
        // console.log(req.query.id)
        const sqlstr = 'select * from city where pid = ?'
        db.query(sqlstr, req.query.id, (err, results) => {
            if (err) return res.send(err)
            res.send(results)
        })
    })
    // 县
router.get('/area', (req, res) => {
        // console.log(req.query.id)
        const sqlstr = 'select * from city where pid = ?'
        db.query(sqlstr, req.query.id, (err, results) => {
            if (err) return res.send(err)
            res.send(results)
        })
    })

module.exports = router

ajaxtemplatebootstrapselectselectpickerrefresh_70">2、$.ajax调用数据,template模板渲染页面,bootstrap.select动态加载数据加上刷新selectpicker('refresh')

1、页面加载调用获取省份函数;
2、省份改变onchange触发获取城市函数、并且清除县城数据
3、城市改变onchange触发获取县城区域函数

$(function() {
    getprovince();

    $("#province").on('change', function() {
        let id = $(this).val();
        console.log(id);
        // 清空三级select标签
        let html = template('selectinfo', {
            list: []
        })
        $("#area").html(html).selectpicker('refresh')
        getcity(id);
    })
    $("#city").on('change', function() {
        let id = $(this).val();
        console.log(id);
        getarea(id);
    })

    // 获取省份
    function getprovince() {
        $.ajax({
            type: 'get',
            url: 'http://127.0.0.1:8089/province',
            success: (data) => {
                let html = template('selectinfo', {
                        list: data
                    })
            $("#province").html(html).selectpicker('refresh')

            }
        })
    }

    // 根据省份获取城市
    function getcity(id) {
        $.ajax({
            type: 'get',
            url: 'http://127.0.0.1:8089/city',
            data: {
                id: id
            },
            success: (data) => {
                let html = template('selectinfo', {
                        list: data
                    })
                $("#city").html(html).selectpicker('refresh')

            }
        })
    }

    // 根据城市获取县城
    function getarea(id) {
        $.ajax({
            type: 'get',
            url: 'http://127.0.0.1:8089/area',
            data: {
                id: id
            },
            success: (data) => {
                let html = template('selectinfo', {
                        list: data
                    })
                $("#area").html(html).selectpicker('refresh')
            }
        })
    }
})

3、bootstrap.select.js制作选择框样式

           <select class="selectpicker" id="province" title="请选择省份" data-size="8" multiple data-live-search="true" data-max-options="1">    
            </select>
            <select id="city" class="selectpicker" title="请选择城市" data-size="8" multiple data-live-search="true" data-max-options="1">
            </select>
            <select id="area" class="selectpicker" title="请选择县城" data-size="8" multiple data-live-search="true" data-max-options="1">
            </select>

4、template模板样式

<!-- 三级联动模板 -->
    <script id='selectinfo' type='text/html'>
        <!-- 循环生成option列表 -->
        {{each list}}
        <option value="{{$value.id}}">{{$value.cityname}}</option>
        {{/each}}
    </script>

总结

使用node+express+mysql制作接口,使用bootstrap.select.js制作选择框样式,ajax,templat渲染数据动态刷新。


http://www.niftyadmin.cn/n/1579569.html

相关文章

使用Vue制作todoList实现增删改

一、实现样式 二、文档结构 三、核心点 todos分为外面整体的App.vue&#xff0c;里面包含todoHeader.vue、List.vue>Item.vue、TodoFooter.vue 采用localStorage本地存储&#xff0c;对数据todos进行深度监视watch&#xff0c;只要数据一改变&#xff0c;就对localStorage本…

关于手机端JQuery的使用心得

1。 如何在台式机上模拟手机显示效果&#xff1f; 为了在台式机上模拟手机的效果&#xff0c;建议使用opera或者chrome浏览器。 很多网站都通过User-Agent来判断浏览器类型&#xff0c;如果是3G手机&#xff0c;显示手机页面内容&#xff0c;如果是普通浏览器&#xff0c;显示普…

VMware 创建虚拟机的磁盘操作

VMware的磁盘可以挂在在两种总线下&#xff1a;IDE&#xff0c;SCSI。IDE总线的速度比较慢&#xff0c;但是价格低廉。一般的pc机都会采用IDE总线。&#xff08;感觉目前的pc都采用sata总线。和IDE的并行相比&#xff0c;串行通信的sata速度更快&#xff0c;占用更少的线路&…

进程和线程的区别(重点)

来源&#xff1a;http://www.cnblogs.com/lmule/archive/2010/08/18/1802774.html 简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程&#xff0c;使得多线程程序的并发性高。另外&#xff0c;进程在执行过程中拥有独立的内存单元&#xff0c;而…

我对云计算的简单了解

云的概念就是向我们提供服务&#xff0c;而我们不需要关心这种服务的架构或者技术实现有多么复杂&#xff0c;我们只需要根据服务商提供的接口使用自己需要的服务&#xff0c;云计算给我们带来了更低的成本支出&#xff0c;比如&#xff1a;一个企业他们可以将自己的互联网服务…

随记之oracle查询某字段某几位的条件 substr

数据库中想要查询 前两位是XX的数据 "select * from tablename where substr(ziduan,1,2)XX" ;ziduan为字段名&#xff0c;substr获取该字段 从第1位开始共2位的的字符转载于:https://www.cnblogs.com/bobogoodgoodstudy/archive/2013/04/19/3030216.html

SystemCenter2012SP1实践(9)如何申请证书

在上一章提及为SAC的网站申请证书&#xff0c;以消除证书错误的报错提示&#xff0c;毕竟如果让用户看到证书错误提示会显得很不专业。但是周末的时候仔细检查了一下&#xff0c;发现之前章节中只是介绍了搭建证书服务的方法&#xff0c;而没有介绍如何申请证书&#xff0c;考虑…

SAP JCO connector 例子

2019独角兽企业重金招聘Python工程师标准>>> SAP JCO connector3与SAP 通过RFC的方式建立连接以及数据交互的例子。 步骤&#xff1a; 初始化连接用户名,密码,连接池等信息 sap-conig.properties文件: #notes:更多配置项see com.sap.conn.jco.ext.DestinationDat…