我相信我通过在短时间内拨打太多电话来超时网络服务。我希望在我的jquery中$.each
循环的每次迭代之间等待大约5秒钟。
以下是我的观点:
function submitMyList(myList) {
$.each(JSON.parse(myList), function (key, value) {
setTimeout( function(){
$.ajax({
type: 'POST',
url: '@Url.Action("submitMyList", "myController")',
dataType: 'html',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify(//passing my values),
success: function (result) {
//success code
},
error: function (result) {
//error code
},
complete: function () {
//completion code
}
});
}, 5000)
});
}
这仍然是一个接一个地执行得非常快。
答案 0 :(得分:2)
当你运行“each”时,你会立即设置很多计时器, all 等待5秒,然后同时运行。 这是因为每个人都希望尽快完成它的循环,并运行它的所有功能(包括“setTimeout”功能)。它不必等待任何事情,所以运行并设置了很多'超时:)
最简单的解决方案是让setTimeout等待5000 * num
毫秒,并在每个循环中增加num,如下所示:
function submitMyList(myList) {
var num = 0;
$.each(JSON.parse(myList), function (key, value) {
num++;
setTimeout( function(){
$.ajax({
type: 'POST',
url: '@Url.Action("submitMyList", "myController")',
dataType: 'html',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify(//passing my values),
success: function (result) {
//success code
},
error: function (result) {
//error code
},
complete: function () {
//completion code
}
});
}, 5000*num);
});
}
答案 1 :(得分:2)
这种方法可行:
$(document).ready(function () {
var a = new Array("Apples", "Bananas", "Oranges")
jQuery.each(a, function (idx, val) {
setTimeout(function() {
console.log("At "+idx+" Val "+val)
}, idx * 5000);
})
})
在你的具体案例中试试这个:
function submitMyList(myList) {
var idx = 0;
$.each(JSON.parse(myList), function (key, value) {
setTimeout( function(){
$.ajax({
type: 'POST',
url: '@Url.Action("submitMyList", "myController")',
dataType: 'html',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify(//passing my values),
success: function (result) {
//success code
},
error: function (result) {
//error code
},
complete: function () {
//completion code
}
});
}, idx*5000)
idx++;
});
};
示例:http://jsfiddle.net/1w6uxLxs/1/
这个想法 你必须将你的超时乘以迭代次数,因为发生的是超时是一个接一个地设置(基本上同时),因为发生的是循环遍历所有元素和你指示浏览器的每个元素({ {1}})在一定时间后执行一个函数。通过将此时间量乘以索引,您将获得“延迟”效果。看看此示例中控制台中发生的情况:http://jsfiddle.net/1w6uxLxs/2/