それは次のように見えるはずです
$(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 のベスト プラクティスには従いませんでした。
ウォークスルー
- select with id state で「変更」イベントに登録します。
- 変更が発生すると、場所「/listCities」への Ajax リクエストを呼び出します
- この場所は「GET」メソッドで呼び出されると思います
- 現在選択されている州を渡すので、サーバーはリストする都市を認識します。
- Ajax でエラーが発生した場合は、エラーをコンソールに記録します。
- Ajax が成功した場合は、各都市の値とラベルを含むオプションを使用して、id "city" を select に入力します。
コードを書いている間、私は次のことを想定しました
- 状態を期待するルート GET /listCities があります。
そのルートからの応答は、各都市の値とラベルのリストを含む JSON です。このようなもの :
[{ value : "AM" , label : "Amsterdam" }, .... ]
この例で読む必要があるのは、次のことだけです。
ご不明な点がございましたら、私の回答にコメントしてください。喜んで説明/追加/変更させていただきます