-2

我有这个代码:

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);

}

但是警报是空的,我该怎么办?非常感谢您

4

3 回答 3

1

提醒您的 json,不会在代码底部起作用。在 Ajax 调用完成之前不会填充 json 变量,因此警报在 if 语句中可以正常工作。

您可以在 if 语句中放置一个回调方法,并在您的 Ajax 查询完成后将其回调。

于 2013-07-23T14:54:08.550 回答
0

欢迎来到异步编程的精彩世界!

您必须alert在回调函数内部移动。

你可能会推动你的代码表现得像同步的,但我不推荐它,你总是会发现自己在与设计作斗争。

于 2013-07-23T14:54:44.303 回答
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 请求完成后执行。

于 2013-07-23T14:56:21.637 回答