2017-08-07 94 views
-2

如果ajax返回錯誤,我似乎無法擺脫我的每個循環。我試過

return false; 

和其他類似的東西,但$ .each仍然繼續運行。

我需要做到這一點,以便我可以在通過ajax發佈後顯示來自後端的錯誤消息(我知道這是不好的做法,但客戶端需要能夠發送多個表單立刻。)。

任何人都可以解釋我做錯了什麼嗎?

var postAll = function(button_clicked) 
{ 
e.preventDefault(); 

var form_response = []; 
var formsCollection = document.getElementsByTagName("form"); 

$.each(formsCollection, function (key, value) 
{ 
    console.log(value.action); 
    console.log(value.id); 

    var url = value.action; 
    var id = value.id; 
    var data = ($('#' + id + '').serialize()); 


    if (id == 'additionalInfo') 
    { 
     data = {'Add_info': $('#Add_info').val(),}; 
    } 

    if (id != 'DONE') 
    { 
     $.ajax({ 
     type: "POST", 
     dataType: 'json', 
     url: url, 
     beforeSend: function (xhr) 
     { 
      xhr.setRequestHeader('X-CSRF-TOKEN',$("#token").attr('content')); 
     }, 
     data: data, 
     success: function (data) 
     { 
      console.log('success'); // show response from the php script. 
      form_response.push(data); // show response from the php script. 
     }, 
     error: function (data) 
     { 
      console.log('fail'); // show response from the php script. 
      display_errors(data, id); // show response from the php script. 
      return true; 
     } 
     }); 
    } 
}); 
} 
+1

究竟是什麼工作不喜歡它應注意什麼? –

+0

您的意思是如果任何請求失敗,您想提前退出'each'迭代?他們目前正在異步執行,所以他們可能都被髮送之前,第一個返回 – harmic

+0

@PeterMader我有一個for循環,但發現每個工作好一點 – Tfish

回答

1

AJAX是異步的,執行你的$。每個功能它將執行AJAX調用和「不等待」爲他人完成

解決你的問題時,你必須寫,將執行一個功能第一次ajax調用,並且在成功的時候它會再次執行第二次ajax調用。

例子:

var data = [form1,form2...etc]; 
function letsLoop(data,index = 0){ 
    $.ajax({ 
     url:.... 
     success: function(){ 
      letsLoop(data,index+1); 
     }, 
     error: function(){ 

     } 
    }); 
} 

,在這裏你調用你的函數:

letsLoop(data,0); 
+0

這工作得很好,謝謝! – Tfish

+0

很高興我能幫忙:) – Sletheren

1

如果終止循環,你的意思是在你的錯誤處理程序的return,那麼它不會因爲你認爲它會工作。

您的循環一次創建異步請求。然後,這些請求中的每一個都由瀏覽器處理(或多或少地同時),然後得到響應。所以當你的錯誤處理程序運行循環已經很久了。

順便說一句,你的情況的返回與錯誤處理程序有關,而不是循環內的函數。

因此,要實現你想要的東西,你應該'排隊'你的AJAX請求並逐一執行它們。

一個可能的解決方案是創建一個表單數組,然後從第一個表單中取出(並從數組中移除),執行請求,對響應重複整個事情,並不斷重複,直到數組爲空。