我有一个令我困惑的问题。我正在使用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结束。
答案 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;这是一个阻止通话,我通常会避免,但我没有看到替代方案。