等待AJAX​​请求完成?

时间:2011-04-21 17:53:48

标签: javascript

我有一个令我困惑的问题。我正在使用ajax从网站上获取一些ID。一旦完成,我想将ID存储在变量中以便进一步处理。我的代码布局如下:

var ids;

function get_ids() { ... Get the ID's from the site and store them in the global variable ids ... }

get_ids();
alert(ids.length);

正如您所看到的,ID总是为0,因为在get_ids中的ajax请求有机会响应之前,脚本将继续运行。

我想要做的最好的方法是什么?我想等到get_ids结束。

4 个答案:

答案 0 :(得分:11)

你需要让get_ids获取一个回调参数,并在收到回复时调用它。

例如:

function get_ids(callback) {
    ...
        response: function(data) {
            ...
            callback(data);
        }
    ...
}

get_ids(function(ids) { 
    ...
});

答案 1 :(得分:4)

这取决于您的AJAX框架,但几乎任何框架都允许您指定在AJAX请求完成时运行的函数。在JQuery中:

function get_ids_complete() {
    alert(ids.length);
}

function get_ids() {
    $.get('/ids', function (data) {
        // do something with the data
        get_ids_complete();
    });
}

答案 2 :(得分:2)

如果你使用普通的旧javascript,你可以调用一个函数在AJAX完成之后运行,如下所示:

ajaxCall.onreadystatechange=function()
  {
  if (ajaxCall.readyState==4 && ajaxCall.status==200)
    {
     //do your ID stuff here
    }
  }

答案 3 :(得分:0)

我在这种情况下使用同步AJAX;这是一个阻止通话,我通常会避免,但我没有看到替代方案。

请参阅Synchronous AJAX