2016-07-30 66 views
0

我想建立一個jQuery每個循環與ajax調用,但由於某種原因,它不會停止執行,從而循環我的所有代碼。這個jquery每個都有什麼問題?

我在這裏做錯了什麼?

的每一個循環:

$.each(JSEFileNames, function(key, value){ 
    $.ajax({ url: "/"+key, 
     success: function(r){ 
     $(JSEPlaceholder).html(r); 
     JSEFileNames[key] = $(JSEPlaceholder).text().toString().replace(/(\r\n|\n|\r)/gm,"") + $(JSEPlaceholder).children().text().toString().replace(/(\r\n|\n|\r)/gm,""); 
     $(JSEPlaceholder).empty(); 
     return; 
     } 
    }); 
    }); 

JSEFileNames含有類似

JSEFileNames= { 
"index.php": "", 
"something.txt": "" 
} 

東西,JSEPlaceholder只是包含 「#searchBox」 的字符串。

這是全碼: https://jsbin.com/kifisameto/edit?html,js,output

+0

報價是錯誤地放在JSEFileNames – KillianC

+0

@Killian這不是問題,但只是在寫錯問題。如果這是問題,代碼根本無法運行。 – nicael

+0

@nicael正確,不好意思!我更新了代碼。 –

回答

0

注意,return是沒有意義的,因爲它是函數的最後一行了。它只會退出這個功能,但$.each將繼續執行,因爲它包含在另一個函數中。

這是,如果你打破你的代碼會發生什麼:

$.each(JSEFileNames, ajaxFunction); 

function ajaxFunction(key, value){ 
    $.ajax({ url: "/"+key, success: successFunction }); 
} 

function successFunction(r) { 
    $(JSEPlaceholder).html(r); 
    JSEFileNames[key] = $(JSEPlaceholder).text().toString().replace(/(\r\n|\n|\r)/gm,"") + $(JSEPlaceholder).children().text().toString().replace(/(\r\n|\n|\r)/gm,""); 
    $(JSEPlaceholder).empty(); 
    return; 
} 

在這裏你可以看到,return不是做你想要做的事。您需要在ajaxFunction呼叫中執行return false才能停止呼叫。這是你如何能做到這一個例子:

$.each(JSEFileNames, function(key, value){ 
    cont = true; 
    $.ajax({ url: "/"+key, async: false, 
     success: function(r){ 
     $(JSEPlaceholder).html(r); 
     JSEFileNames[key] = $(JSEPlaceholder).text().toString().replace(/(\r\n|\n|\r)/gm,"") + $(JSEPlaceholder).children().text().toString().replace(/(\r\n|\n|\r)/gm,""); 
     $(JSEPlaceholder).empty(); 
     cont = false; 
     } 
    }); 
    return cont; 
}); 

這裏發生的事情是一個return valuevalue評估,以false將停止jQuery的循環;如果valuetrue,循環將繼續運行。官方文檔見here

請注意,我添加了async: false;的確,$.ajax是一個異步函數,並且它會在cont之前被返回。只有在請求成功或失敗後,底層調用纔會被處理。一種解決方法是使請求同步,但它會阻止其他代碼在此期間執行。這可能是您在這裏尋找的內容,因爲您可以在多個頁面上顯示搜索結果,並且不希望一次搜索所有頁面,而是一個接一個地檢查它們。

+0

對不起,它仍然不起作用。反正好想。 –

+0

你可以在此擴展嗎?究竟發生了什麼,期望的輸出是什麼? – pie3636

+0

https://jsbin.com/kifisameto/edit?html,js,output這可能會有所幫助。 –