我正在开发一个基于内部网络的工具
因为我需要根据数组值生成一系列ajax调用。我之前做过同步,如果我这样做,那么它会阻止浏览器,所以我无法在ajax运行时显示加载图像。
因此我将调用更改为异步,现在发生的是ajax调用正在进行拉伸,并且响应与UI中的所有调用相同,但如果我在firebug中检查响应是否清楚,如果我在循环中放置一些警报,那么它可以正常工作。
我发布了代码以供进一步参考
// calling the function within loop
$.each(texts, function (tind, tval) {
setTimeout(function () {
txtcmpare(tval, search_logo, ask_logo, option_logo);
},2000);
});
//the function which calls ajax (txtcmpare)
function txtcmpare(actval, sl, al, ol) {
var tch_locale = new Array();
var tch_tempname = new Array();
if (actval != "==" && actval != "") {
avail = 0;
tparam = actval;
//respout = findloacle(param);
setTimeout(function () {
findloacle(tparam, function (y) {
// my operations
});
},2000);
}
if I put some alert here, sometimes response are clear
}
//the ajax function
function findloacle(locparam,callback) {
//var loc = new Array();
$.ajax({
type: "POST",
url: "Services/Locale.asmx/ajaxresp",
contentType: "application/json; charset=utf-8",
data: JSON.stringify({ queryparam: locparam }),
dataType: "json",
cache: false,
success: function (data) {
//loc = result.d;
callback(data);
},
error: function () {
alert("error");
}
});
//return loc;
}
答案 0 :(得分:0)
尝试在循环内应用闭包:
$.each(texts, function (tind, tval) {
(function (_tval) {
setTimeout(function () {
txtcmpare(_tval, search_logo, ask_logo, option_logo);
}, 2000);
}(tval));
});
答案 1 :(得分:0)
我自己也遇到过类似的问题。我在while循环中运行了一系列ajax请求。有些电话没有发出!它杀了我!!我的结论是我的浏览器 - 谷歌浏览器 - 忽略了“重复”请求。
看看这个伪代码:
while (i < ajaxCallArray.length) {
currentAjaxObject = ajaxCallArray[i];
ajaxPost = $.post(currentAjaxObject.url, function(data) {
//response data needs to go into a function such that each request gets its own "data" variable created.otherwise it just overwrites data!!
processAjaxResponse(data, currentAjaxObject);
},"json");
i++;
}
如果ajaxCallArray[0].url = "http://www.google.com"
,ajaxCallArray[1].url = "http://www.google.com"
和ajaxCallArray[2].url = "http://www.google.com"
,浏览器只会实际拨打1个电话!!
即使您不使用这些网址参数,也必须执行ajaxCallArray[0].url = "http://www.google.com?count=0"
,ajaxCallArray[1].url = "http://www.google.com?count=0"
和ajaxCallArray[2].url = "http://www.google.com?count=0"
之类的操作,只需添加一些内容即可使其区别开来。这样浏览器就会处理所有的呼叫,即使它们是立即完成的。
希望这会有所帮助!!