2017-09-25 11 views
0

データを取得するためにAjaxコールを作成しています.4行あり、toSendEmail()メソッドを使用して電子メールを送信しています。forループAjax呼び出しのための私のIDは、ここでは...(私はアヤックスのURLを作成するために、IDを使用しています)アレイに格納されているため、そのためのコードは次のとおりです。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回送信されていることです。私は電子メール機能が一度だけ呼び出す必要があります。私は自分のコードを変更する必要がありますか?

は今あなた

答えて

2

をありがとう、あなたはそれがすべてのAjaxの完了時に実行されますを意味し、すべてのAjax呼び出し、ために行わ()メソッド内でごtoSendEmail関数を呼び出しています。すべてのAjaxが完了した後で一度だけ実行したいので、jqueryのwhen()を使います。さらに詳しい情報:私はURLにIDを送信していますので、Wait until all jQuery Ajax requests are done?

+0

私はAjaxの呼び出しがforループ内で実行したい電子メールを送信配列によって –

+0

私は今(あなたのAjax呼び出しが電子メールの送信原因となっていると思っていた)ことを認識し、私の答えを修正しました。申し訳ありません –

+0

データを収集して別の配列に格納するための成功関数を配列に持っています...しかし、私の投稿に表示されたforループはURLの配列から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

関連する問題