它应该看起来像
$(function(){
// populate the states list from Ajax
$.ajax( {
url:"/listStates",
type:"GET",
success:function( data ) {
var statesList = data;
if ( typeof(data) == "string" ){
statesList = JSON.parse(data);
}
$.each( statesList, function( index, state ){
$("#state").append($("<option></option>",{value:state.value, text:state.label});
});
},
error:function( result ) {
console.log(["error getting states",result]);
}
});
// register on state list change
$("#state").change( function(){
// on change dispatch an AJAX request for cities and populate cities
$.ajax({ url : "/listCities",
data : {"state": $("#state").val() },
type:'GET',
success:function( data ) {
var citiesList = data; // assuming list object
if ( typeof(data) == "string"){ // but if string
citiesList = JSON.parse( data );
}
$("#city").empty();
$.each(citiesList, function(index,city){
$("#city").append($("<option></option>", {"value":city.value, "text":city.label}));
}
},
error:function( result ){ console.log(["error", result]); }
})
});
这可以让你开始,但是我没有在这里遵循 lint 最佳实践。
走过
- 我在带有 id 状态的 select 上注册了一个“更改”事件。
- 如果触发更改,我会调用 Ajax 请求到位置“/listCities”
- 我假设这个位置是用“GET”方法调用的
- 我传递当前选择的状态 - 所以服务器将知道要列出哪些城市。
- 如果 Ajax 通过错误,我将错误记录到控制台。
- 如果 Ajax 成功,我会使用包含每个城市的值和标签的选项填充 id 为“city”的选择。
我在编写代码时假设了以下事情
- 您有一个需要状态的路线 GET /listCities。
该路由的响应是一个 JSON,其中包含每个城市的值和标签列表。像这样的东西:
[{ value : "AM" , label : "Amsterdam" }, .... ]
对于此示例,您可能需要阅读的唯一内容是:
如果您有任何问题,请评论我的回复,我将很乐意解释/添加/修改