我正在进行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次。我想要电子邮件功能应该只调用一次。我需要在代码中进行哪些更改?
谢谢
答案 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
}