gpt4 book ai didi

jquery - 延迟和 Ajax

转载 作者:行者123 更新时间:2023-12-03 22:32:41 27 4
gpt4 key购买 nike

像这样读取 JSON 服务:

$.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);
}
}
});
}
}
});

第一个网络跟踪是:

  1. activeID = [14,15]
  2. info?id=14(需要 2 秒)= "foo"
  3. info?id=15(需要 4 秒)= "bar"

在本例中,警报给出“2”。

秒网络跟踪不同:

  1. activeID = [14,15];
  2. info?id=14(需要 20 秒)= "foo"(现在需要很长时间)
  3. info?id=15(需要 1 秒)= "bar"

在这种情况下,警报在一秒后给出 1,这是糟糕!!!

问题:

如何使用 $.Deferred 代替 isLast

最佳答案

您需要等待所有请求在 alert 之前完成ing。

$.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);
}
}
});

这假设所有请求都成功。 看起来还有一些错别字

    <罢工>
  • tableRows在哪里更新了吗?
  • entries 在哪里已定义?

编辑现在使用 promise 风格的成功处理程序。应该将结果插入 tableRows在调用 $.when().then 之前回调

关于jquery - 延迟和 Ajax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37047280/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com