它并没有删除所有内容,当您这样做时,JSON 请求还没有完成items += "</select>";
!
$.getJSON
异步运行,这意味着该语句开始对给定 URL 的请求,但它不等待答案,然后程序流程继续执行下一条语句(在您的情况下items += ...
,不等待$.getJSON
完成!仅当响应到达,调用给定的成功函数。
在如何解决该问题时,您有两种选择。备选方案 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 有可能使您的脚本更具响应性,如果除了填写此选择之外还有其他事情要做;因为那时请求在后台运行,与您的其他代码准并行。所以我通常会这样做。