ajax和for循环谁难,关于“for”循环中jquery $ .ajax的问题
我相信有一些事情正在發(fā)生。首先,$ temp_id變量被提升到函數(shù)的頂部,所以它相當(dāng)于這樣做:
$.ajax({
……
success:function(){
var $temp_id;
for (var i = 0; i < $children.length; i++) {
$temp_id = $children.eq(i).attr("id");
其次,即使$ temp_id在第一個(gè)循環(huán)中等于“id-1”,它也會(huì)在第二個(gè)循環(huán)中變?yōu)椤癷d-2”,所以當(dāng)你第一次調(diào)用成功回調(diào)時(shí),它已經(jīng)被改為“id-2”。
這可以解決您的問(wèn)題:
更新2010-12-03:修正了一個(gè)錯(cuò)誤
$.ajax({
……
success:function(){
for (var i = 0; i < $children.length; i++) {
var $temp_id = $children.eq(i).attr("id"); //"$children" have defined in above
$.ajax({
type: "get",
url: "Database/App_all.xml",
dataType: "html",
success: function($tid) {
return function (xml) {
var $temp_code = $(xml).find("app[id='" + $tid + "']").find("html_code").html();
$($temp_code).appendTo($("#contain")).hide().show('slow');
}
}($temp_id),
error: function () { }
});
}
}
});
我正在做的是將$ temp_id傳遞給返回另一個(gè)函數(shù)的函數(shù),該函數(shù)將在成功回調(diào)中調(diào)用。現(xiàn)在可以安全地在成功回調(diào)中使用$ tid,因?yàn)楫?dāng)$ temp_id在第二個(gè)循環(huán)中發(fā)生變化時(shí)它不會(huì)受到影響。
更新:回復(fù)hh54188的評(píng)論
使用“alert”可以打破執(zhí)行過(guò)程并允許意外調(diào)用ajax回調(diào)。在IE和Firefox中就是這種情況。另一方面,Chrome的行為不是這樣的。要對(duì)此進(jìn)行測(cè)試,您可以運(yùn)行以下代碼:
for (var i = 0; i < 2; i++) {
//if (i == 1) alert('stopping execution');
console.log('loop: ' + i);
$.ajax({
url: "Database/App_all.xml",
dataType: "html",
success: function () {
console.log('callback');
}
});
}
您將看到控制臺(tái)中的輸出為:
循環(huán):0
循環(huán):1
回調(diào)
回調(diào)
現(xiàn)在取消注釋警報(bào)線。在Firefox和IE中,您將看到控制臺(tái)中的輸出現(xiàn)在是:
循環(huán):0
回調(diào)
循環(huán):1
回調(diào)
顯示警告框時(shí),將調(diào)用第一個(gè)回調(diào)。警報(bào)實(shí)質(zhì)上改變了代碼的行為。在JavaScript中進(jìn)行開(kāi)發(fā)時(shí),使用“alert”可能會(huì)令人沮喪,因?yàn)樗赡軐?dǎo)致代碼執(zhí)行不可預(yù)測(cè)。因此,我不建議在調(diào)試時(shí)使用“alert”。相反,使用console.log()更容易預(yù)測(cè)。 console.log()適用于所有現(xiàn)代瀏覽器和IE 8+。對(duì)于較舊的IE,您需要將文本輸出到DOM中。
總結(jié)
以上是生活随笔為你收集整理的ajax和for循环谁难,关于“for”循环中jquery $ .ajax的问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ftp服务器上传文件提示451,解决II
- 下一篇: 服务器物理内存总是九十几,服务器物理内存