nodejs三级联动

该博客介绍了如何使用Node.js创建一个服务器,提供三级联动数据接口,包括省份、城市和县区的数据。通过GET方法访问指定URL,返回包含省份、城市和县区信息的JSON响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

标题

html## 标题

Document
<script type="module">

    import QueryString from "../js/QueryString.js";

    var citiesId, countiesID, id, perform, Plist,arr6 =[] ,arr5 = [], arr1 = [], arr2 = [], arr3 = [], arr4 = [];
    init();
    function init() {
        ajax("province")
    }
    function ajax(type, data) {
        if (data === undefined) data = "";
        data = QueryString.stringify(data);
        var xhr = new XMLHttpRequest();
        xhr.addEventListener("load", loadHanlder);
        xhr.open("GET", "http://10.9.72.249:4900/" + type + "/?" + data);
        xhr.send();
    }

    function loadHanlder(e) {
        var xhr = e.currentTarget;
        xhr.removeEventListener("load", loadHanlder);
        var type = xhr.responseURL.trim().split("?")[0];
        if (type.slice(-1) === "/") type = type.slice(0, -1);
        type = type.split("/").pop();
        var o = JSON.parse(xhr.response);
        Plist = o.provinceList
        citiesId = o.citiesList
        countiesID = o.countiesList
        createList(Plist);
    }

    function createList(data) {
        var select1 = document.querySelector("#province");
        var frg = document.createDocumentFragment()
        for (var i = 0; i < data.length; i++) {
            var option = document.createElement('option')
            option.textContent = data[i].provinceName
            frg.appendChild(option)
        }
        select1.appendChild(frg)
        select1.addEventListener("change", changeHandler);
        console.log(data[0].cities)
        for (let i = 0; i < data[0].cities.length; i++) {
            citiesId.forEach(item => {
                if (item.id === data[0].cities[i]) {
                    arr6.push(item)
                }
            })
        }
        createList2(arr6)
        arr6 =[]
        arr6.length = 0
    }

    function changeHandler(e) {
        arr1 = []
        arr1.length = 0
        arr2 = []
        arr2.length = 0
        Plist.forEach(item => {
            if (item.provinceName === this.value) {
                item.cities.forEach(item => {
                    arr1.push(item)
                })
            }
        })
        for (let i = 0; i < arr1.length; i++) {
            citiesId.forEach(item => {
                if (item.id === arr1[i]) {
                    arr2.push(item)
                }
            })
        }
        createList2(arr2)
    }
    function createList2(data) {
        var select2 = document.querySelector("#cities");
        select2.innerHTML = ''
        var frg = document.createDocumentFragment()
        for (var i = 0; i < data.length; i++) {
            var option = document.createElement('option')
            option.textContent = data[i].citiesName
            frg.appendChild(option)
        }
        select2.appendChild(frg)
        select2.addEventListener("change", changeHandler2);
        for (let i = 0; i < data[0].counties.length; i++) {
            countiesID.forEach(item => {
                if (item.id === data[0].counties[i]) {
                    arr5.push(item)
                }
            })
        }
        createList3(arr5)
        arr5 = []
        arr5.length = 0
    }


    function changeHandler2(e) {
        arr3 = []
        arr3.length = 0
        arr4 = []
        arr4.length = 0
        citiesId.forEach(item => {
            if (item.citiesName === this.value) {
                item.counties.forEach(item => {
                    arr3.push(item)
                })
            }
        })

        for (let i = 0; i < arr3.length; i++) {
            countiesID.forEach(item => {
                if (item.id === arr3[i]) {
                    arr4.push(item)
                }
            })
        }
        createList3(arr4)
    }
    function createList3(data) {
        var select3 = document.querySelector("#counties");
        select3.innerHTML = ''
        var frg = document.createDocumentFragment()
        for (var i = 0; i < data.length; i++) {
            var option = document.createElement('option')
            option.textContent = data[i].countiesName
            frg.appendChild(option)
        }
        select3.appendChild(frg)
    }
</script>

js
使用nodejs开启服务器
let http = require(‘http’)
let querystring = require(‘querystring’)
let provinceList = [
{
id:“1001”,
provinceName:‘山东省’,
cities:[10001,10002,10003,10004]
},
{
id:“1002”,
provinceName:‘浙江省’,
cities:[10005,10006,10007,10008]
},
{
id:“1003”,
provinceName:‘江苏省’,
cities:[10009,10010,10011,10012]
},
{
id:“1004”,
provinceName:‘湖北省’,
cities:[10013,10014,10015,10016]
}
]
let citiesList = [
{ id:10001,citiesName:‘济南市’,counties:[100011,100012] },
{ id:10002,citiesName:‘青岛市’,counties:[100021,100022] },
{ id:10003,citiesName:‘临沂市’,counties:[100031,100032] },
{ id:10004,citiesName:‘淄博市’,counties:[100041,100042] },
{ id:10005,citiesName:‘杭州市’,counties:[100051,100052] },
{ id:10006,citiesName:‘宁波市’,counties:[100061,100062] },
{ id:10007,citiesName:‘温州市’,counties:[100071,100072] },
{ id:10008,citiesName:‘绍兴市’,counties:[100081,100082] },
{ id:10009,citiesName:‘南京市’,counties:[100091,100092] },
{ id:10010,citiesName:‘无锡市’,counties:[100101,100102] },
{ id:10011,citiesName:‘徐州市’,counties:[100111,100112] },
{ id:10012,citiesName:‘常州市’,counties:[100121,100122] },
{ id:10013,citiesName:‘武汉市’,counties:[100131,100132] },
{ id:10014,citiesName:‘宜昌市’,counties:[100141,100142] },
{ id:10015,citiesName:‘黄石市’,counties:[100151,100152] },
{ id:10016,citiesName:‘十堰市’,counties:[100161,100162] },
]
let countiesList = [
{ id:100011,countiesName:‘历下区’ },
{ id:100012,countiesName:‘市中区’ },
{ id:100021,countiesName:‘胶州市’ },
{ id:100022,countiesName:‘莱西市’ },
{ id:100031,countiesName:‘沂南县’ },
{ id:100032,countiesName:‘沂水县’ },
{ id:100041,countiesName:‘桓台县’ },
{ id:100042,countiesName:‘高青县’ },
{ id:100051,countiesName:‘桐庐县’ },
{ id:100052,countiesName:‘上城区’ },
{ id:100061,countiesName:‘象山县’ },
{ id:100062,countiesName:‘宁海县’ },
{ id:100071,countiesName:‘永嘉县’ },
{ id:100072,countiesName:‘平阳县’ },
{ id:100081,countiesName:‘越城区’ },
{ id:100082,countiesName:‘柯桥区’ },
{ id:100091,countiesName:‘玄武区’ },
{ id:100092,countiesName:‘浦口区’ },
{ id:100101,countiesName:‘锡山区’ },
{ id:100102,countiesName:‘惠山区’ },
{ id:100111,countiesName:‘鼓楼区’ },
{ id:100112,countiesName:‘泉山区’ },
{ id:100121,countiesName:‘天宁区’ },
{ id:100122,countiesName:‘新北区’ },
{ id:100131,countiesName:‘江岸区’ },
{ id:100132,countiesName:‘江汉区’ },
{ id:100141,countiesName:‘远安县’ },
{ id:100142,countiesName:‘兴山县’ },
{ id:100151,countiesName:‘下陆区’ },
{ id:100152,countiesName:‘铁山区’ },
{ id:100161,countiesName:‘茅箭区’ },
{ id:100162,countiesName:‘张湾区’ },
]

var server=http.createServer(function(req,res){
var data="";
res.writeHead(200,{
“content-type”:“text/html;charset=utf-8”,
“Access-Control-Allow-Origin”:"",
“Access-Control-Allow-Headers”:"
",
});
req.on(“data”,function(_data){
data+=_data;
});
req.on(“end”,function(){
var type=req.url.trim().split("?")[0].replace(///g,"");
if(req.method.toLowerCase()===“get”){
if(req.url.includes(“favicon.ico”)) return res.end();
data=req.url.includes("?") ? req.url.split("?")[1] : “”;
}
try{
data=JSON.parse(data);
}catch(e){
data=data ? querystring.parse(data) : {};
}
var o={}
switch(type){
case “province”:
o.provinceList=provinceList;
o.citiesList=citiesList;
o.countiesList=countiesList.map(item=>{
return {id:item.id,countiesName:item.countiesName}
})
break;
}
res.write(JSON.stringify(o));
res.end();
})
});
server.listen(4900,“10.9.72.249”,function(){
console.log(“服务器开启成功”);
})

开发文档接口

项目列表接口

URL :http://10.9.72.249:4900

Method :GET

DataType :

 请求消息:QueryString
 响应消息:JSON

接口名称

http://10.9.72.249:4900/province/
http://10.9.72.249:4900/cities/
http://10.9.72.249:4900/counties/

获取项目和省市县的数据

接口名 province
请求 : 无参数
响应 :
{
provinceList:[
{
id:“项目id”,
provinceName:‘省名称’
cities:[市级id数组]
}

]
citiesList:[
{
id:“市级id”,
citiesName:‘市名称’
counties:[县级id数组]
},

]
countiesList:[
{
id:“县级id”,
countiesName:‘县名称’
},

]
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值