2017-09-25 82 views
0

我正在Ajax調用獲取數據,我得到4行,我正在使用這些發送電子郵件通過toSendEmail()方法..我需要使用for循環對於Ajax調用,因爲我的ID存儲在陣列(我用的ID來創建Ajax的URL)。這裏是代碼爲:電子郵件發送不止一次,在Ajax調用後

function getData() { 
    console.log("Total Element:"+someIds.length); // 4 data 

    for (var i=0; i< someIds.length;i++) { 
     $.ajax({ 
      url: '/SomeURL/' someIds[i];  
// Basic Ajax Coding (type, cache etc......) 

      success: function (result1) { 
       for(var i=0; i<result1.length; i++) { 
        // Storing data in Predefined arrays.. 
       } 
      }, 
      error: function (error) { 
       alert("Errror while....."); 
      } 
     }).done(function() { 
      if(SomeData.length!=0) { 
       toSendEmail(); 
      }; 
     });  

    } 
} 

我的AJAX調用工作正常預期我得到數據..我的問題是電子郵件發送4次。我希望Email函數只能調用一次。我需要在我的代碼中進行更改?

謝謝

回答

2

現在,你在呼喚每一個Ajax調用,這意味着它會在每個Ajax完成運行完成()方法中你toSendEmail功能。在所有的Ajax完成後,你只希望它運行一次,所以使用jquery的when()。更多信息:Wait until all jQuery Ajax requests are done?

+0

我想Ajax調用的循環中運行,因爲我在URL發送ID通過數組 –

+0

我意識到現在(我認爲你的Ajax調用是導致電子郵件被髮送的原因)並且糾正了我的答案;對不起 –

+0

我已經在成功函數收集數據和存儲在不同的數組... ...但我在我的帖子中顯示的通過從URL中的數組ID的ID ..我會編輯帖子給你.. –

2

首先獲取所有的行,那麼當Ajax調用已全部完成,發送電子郵件

function getData() { 
    var promises = [], lines = []; 

    for (var i = 0; i < someIds.length; i++) { 
    var xhr = $.ajax({ 
     success: function(result1) { 
     for (var j = 0; j < result1.length; j++) { 
      lines.push(whatever); 
     } 
     }, 
     error: function(error) { 
     alert("Errror while....."); 
     } 
    }); 

    promises.push(xhr); 
    } 

    $.when.apply($, promises).done(toSendEmail); // all done 
} 
+0

錯誤:: xhr未定義 –

+0

這對我來說很好,你可能已經改變了大括號。 – Bricky