Pet*_*der 8 ajax jquery jquery-deferred
像这样读JSON-Service:
$.ajax({
url:'activeIDs',
success : function(data){ // data = [14,15]
var tableRows = [];
for (var dataIndex=0; dataIndex < data.length; dataIndex++) {
var isLast = dataIndex == (data.length - 1);
$.ajax({
url: 'info?id=' + data[dataIndex],
success: function(data2) { // "foo", "bar"
tableRows.push(data2.name);
if (isLast) {
alert(tableRows.length);
}
}
});
}
}
});
Run Code Online (Sandbox Code Playgroud)
第一个网络跟踪是:
[14,15]
"foo"
"bar"
在这种情况下,警报给出"2".
秒网络跟踪是不同的:
[14,15]
;"foo"
(现在需要很长时间)"bar"
在这种情况下警报提供1
一秒后,这是不好的!
如何使用$ .Deferred代替isLast
?
您需要等待所有请求在完成之前完成alert
.
$.ajax({
url:'activeIDs',
success : function(data){ // data = [14,15]
var tableRows = [];
var requests = [];
for (var dataIndex=0; dataIndex < data.length; dataIndex++) {
var isLast = dataIndex == data.length;
var request = $.ajax({
url: 'info?id=' + data[dataIndex]
}).done(function(data2) { // "foo", "bar"
tableRows.push(data2.name);
});
requests.push(request);
}
// wait for all requests to finish here
$.when(requests).then(function(){
// all success functions have been called and updated things appropriately
alert(tableRows.length);
}
}
});
Run Code Online (Sandbox Code Playgroud)
这假设所有请求都成功.它看起来也有一些拼写错误
tableRows
更新?entries
定义?
使用promise样式成功处理程序立即编辑.应该tableRows
在调用$.when().then
回调之前将结果推送到
归档时间: |
|
查看次数: |
3405 次 |
最近记录: |