在Ajax通话

时间:2017-09-25 23:30:29

标签: javascript jquery ajax email for-loop

我正在进行Ajax调用以获取数据,我正在获取4行以及我用于通过toSendEmail()方法发送电子邮件的那些..我需要使用for循环进行Ajax调用,因为我的ID存储在Array中(我使用Id创建Ajax的URL)..这是代码:

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 个答案:

答案 0 :(得分:2)

现在,你在每个Ajax调用的done()方法中调用你的toSendEmail函数,这意味着它将在每个Ajax完成时运行。在完成所有Ajax之后,你只希望它运行一次,所以使用jquery的when()。更多信息:Wait until all jQuery Ajax requests are done?

答案 1 :(得分: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
}