我開發一個內部的基於Web的工具異步Ajax調用如預期
在我需要生成基於一個數組值AJAX調用序列中不起作用。我作爲同步之前提出的,如果我做了這樣的話它會阻止瀏覽器,所以我不能能顯示加載圖像,而AJAX會。
因此,我將呼叫改爲異步,現在會發生什麼情況是ajax呼叫正在發送,響應與用戶界面中的所有呼叫相同,但是如果我在螢火蟲中檢查響應是否清晰,如果我在循環中放一些警報,那麼它工作正常。
我發佈的代碼作進一步參考
// 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;
}
什麼問題就用封閉來解決? – zeroflagL
保持內部變量的引用(值),否則異步調用可以使用最後一個值,而不是當前的一個。但我不知道這會在這種情況下作品我沒有詳細檢查足夠的代碼,並使用超時可能是這裏的問題 –
我明白倒閉的總體思路;)我只是不知道爲什麼一會想在這裏添加一個。您保存的唯一值是'locparam',它在函數中既不會被更改,也不會被回調使用。 – zeroflagL