2011-04-21 213 views
4

我现在有一个让我困惑的问题。我使用ajax从网站获取一些ID。一旦完成,我想将ID存储在一个变量中作进一步处理。我有我的代码布局是这样的:等待AJAX​​请求完成?

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

正如你可以看到IDS将始终为0,因为该脚本将继续运行在get_ids Ajax请求有机会作出回应前。

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

回答

11

您需要让get_ids接收回调参数,并在接收到响应时调用它。

例如:

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

get_ids(function(ids) { 
    ... 
}); 
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

如果你使用普通的旧javasript,你可以调用一个函数来运行AJAX已经完成,像这样经过:

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

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

请参阅Synchronous AJAX

+1

链接似乎已关闭 – 2016-02-25 19:44:48