這是因爲AJAX是異步。沒有什麼是等待它完成。回調將在通話結束後的某個時間點運行。那時你的$.each
(和後面的代碼)很長時間了。
這裏的解決方案是使用承諾。這樣,你可以運行一次回調全部 AJAX調用完成。
爲此,您可以使用jQuery的$.Deferred
。沒有編輯InputGen()
函數,你可以這樣做:
var promises = [];
$.each(data['Result'][0], function(Key, Value) {
var d = new $.Deferred;
InputGen(Value['Type'], Value['Name'], Value['Other'], Value['Value'], function(Html){
d.resolve([Key, Html]);
});
promises.push(d.promise());
});
$.when.apply($, promises).done(function(){
for(var i=0, length=arguments.length; i < length; i++){
var ele = arguments[i],
Key = ele[0],
Html = ele[1];
Table = Table + "<tr><td>"+Key+"</td><td>" + Html + "</td></tr>";
}
// In here is where you can use your updated `Table` variable.
// You *cannot* use it outside of here, since it was not updated yet
});
你需要某種隊列或承諾系統。 –
AJAX是*異步*。沒有什麼會等待它完成。回調將在通話結束後的某個時間點運行。那時你的'$ .each'(和後面的代碼)很長時間了。 –