我现在得到了下面的代码,它将运行一堆ajax请求(40-50),然后再执行一次。(本质上,它们永远都是如此)
代码:
$(document).ready(function () {
window.setInterval(function () {
$('div.env').each(function (index, item) {
var vm = $(item).text();
var env = "http://localhost:56656/HTML" + vm + ".htm";
$.ajax(env, {
async: false,
URL: env,
type: "GET",
dataType: "html",
success: function (data) {
//alert("Colouring");
var style = $(data).filter('div').attr('style');
var styleObj = {};
$.each(style.split(';'), function () {
var rule = this.split(':');
styleObj[$.trim(rule[0])] = $.trim(rule[1]);
});
$(item).css('background', styleObj.background);
},
error: function () {
$(item).css('background', '#f00');
}
});
});
}, 10000);
});如你所见,我目前使用的超时在IE上运行得特别慢,在chrome上有时也运行得很慢。当我说慢的时候,我的意思是所有的ajax请求都将完成,然后屏幕将用更新刷新。在IE上一直都是这样,偶尔在Chrome上也是如此。理想情况下,我希望ajax做它的请求,更新,然后做下一个ajax请求。
有没有更好的方法来持续处理AJAX请求?
先谢谢你,詹姆斯
发布于 2012-07-10 22:20:34
您可能想要使用Caolan's async library。您的代码可能如下所示(当然,在包含async.js之后):
$(document).ready(function () {
function call() {
var calls = [];
$('div.env').each(function (index, item) {
calls.push(function(callback) {
$.ajax({
// DO NOT USE async: false!!!!
// some ajax settings
complete : function() {
callback();
}
});
});
});
async.parallel(calls, function() {
/* This will fire when every call finishes.
You may want to add timeout here, or else
you will end up flooded with requests. */
call();
});
};
});您应该根据需要对其进行调优(async也可以处理错误,请阅读文档)。你说你想让它们一个接一个地触发,所以用async.series代替async.parallel。
顺便说一句,这段代码:
$.ajax({
async: false纯粹的邪恶!会阻止所有其他脚本,甚至整个浏览器!这可能就是你的“慢速眨眼”问题的原因。
发布于 2012-07-10 22:31:41
不确定在您的情况下是否可能,但websocket/长轮询解决方案,如SignalR或Node.Js + Socket.IO,通常比连续轮询工作得更好。
发布于 2012-07-10 22:38:43
您应该使用setTimeout()而不是setInterval(),并执行以下操作:
如果请求失败,请执行任意操作:)
setTimeout()调用
https://stackoverflow.com/questions/11415118
复制相似问题