2011-04-21 267 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