すべてを削除するわけではありません.JSONリクエストは終了していませんitems += "</select>";
!
$.getJSON
非同期で実行されます。つまり、ステートメントは指定された URL への要求を開始しますが、応答を待たず、プログラム フローは次のステートメントに進みます (あなたの場合はitems += ...
、終了を待たずに$.getJSON
!応答が到着すると、指定された成功関数が呼び出されます。
その問題を解決する方法には 2 つの選択肢があります。代替案 1 は、成功items
するまで文字列のすべての組み立てを延期します。$.getJSON
$.getJSON("https://dev.xxx.com",
function(data){
var items = "<select id=\"orderer_search\" name=\"search\">";
$.each(data, function(index,item) {
items += "<option value='" + item + "'>" + item + "</option>";
});
items += "</select>";
alert(items); // or whatever else you have to do with items
}
);
代替 2 は、関数が応答が来るのを待つように、$.getJSON
呼び出しを非同期にすることです。$.ajax
次のように関数を使用する必要があります。
var items = "<select id=\"orderer_search\" name=\"search\">";
$.ajax({
url: "https://dev.webshop.restore.net.au/_pag/shop/TEST/?
bc=TEST&sec=order%2F&pag=get_orderers_list",
dataType: 'json',
async: false,
success: function(data) {
$.each(data, function(index,item) {
items += "<option value='" + item + "'>" + item + "</option>";
}
}
});
items += "</select>";
alert(items); // or whatever else you have to do with items
代替案 1 は、この選択を埋める以外に何かすることがある場合、スクリプトの応答性を高める可能性があります。リクエストはバックグラウンドで実行されているため、他のコードとほぼ並行して実行されます。だから私は通常それを選びます。