我有这段代码:
function retrieve_districts(){
var json='';
$.get("http://localhost/aaa/districts.php",function(result, textStatus) {
if(textStatus=="success"){
json=JSON.parse(JSON.stringify(result)); (alert works fine here)
}
}, "json");
alert(json);
}
但警报是空的,我该怎么办?非常感谢你
答案 0 :(得分:1)
警告你的json,不会在代码的底部工作。在Ajax调用完成之前,不会填充json变量,因此警报在if语句中可以正常工作。
您可以在if语句中放置一个回调方法,并在Ajax查询完成后再调用它。
答案 1 :(得分:0)
欢迎来到异步编程的精彩世界!
你必须在回调函数中移动alert
。
你可能会推动你的代码表现得像同步一样,但我不推荐它,你总会发现自己在努力反对设计。
答案 2 :(得分:0)
警报为空,因为执行警报时json
的值为''
。
AJAX在设计上是异步的。因此,虽然它在技术上可能它可能在其后的另一行代码之前完成(虽然在这个例子中非常不可能),但它不是保证。当一个AJAX请求启动时,它会继续在另一个线程中,其余的内联代码会立即继续,而无需等待AJAX请求完成。
因此,为了响应您的AJAX请求,您需要在回调函数中执行此操作:
function retrieve_districts(){
var json='';
$.get("http://localhost/aaa/districts.php",function(result, textStatus) {
if(textStatus=="success"){
json=JSON.parse(JSON.stringify(result));
alert(json);
}
}, "json");
}
传递给get()
函数的函数是回调函数,将在AJAX请求完成后执行。