gpt4 book ai didi

php - 在jquery中为ajax调用创建循环

转载 作者:行者123 更新时间:2023-12-01 07:53:33 25 4
gpt4 key购买 nike

我想向超过 2000 个收件人发送电子邮件。我进行了一个 ajax 调用,发送了 50 封电子邮件,并且我想重复它,直到发送完所有电子邮件。 PHP 函数返回一个具有 3 个索引的数组:成功(计算成功邮件)、失败(计算失败邮件)和完成(确定不再存在电子邮件)。因此,我对电子邮件计数进行计数,并使用计数器 (i) 来确定发送了多少电子邮件。我想在 i >= 计数时中断循环。这是我的代码:

function sendEmailStepByStep(imageAddress, counts) {
$(".feature div").append("<br />Please wait...<div class='feature_process'>&nbsp;</div>" + "<div class='feature_message'>Success: <span id='success_email'>0</span>, Failed: <span id='failed_email'>0</span></div>");

var i = 0;
timer = setTimeout(function () {
$.ajax({
type: "GET",
url: "",
dataType: 'json',
data: {
group: 'packages',
do :'emailPackageUsingAjax',
image: imageAddress,
num: i
}
}).done(function (response) {
console.log('success');
console.log(response);
$("#success_email").html(response.Success);
$("#failed_email").html(response.Failed);
i = i + response.Success + response.Failed;
if (i > counts || response.Finish == 'true') {
clearTimeout(timer);
}
}).fail(function (response) {
$(".feature_message").append(response.responseText);
console.log("error");
console.log(response);
clearTimeout(timer);
})
}, 1000);
}

为什么只调用一次?

最佳答案

我建议不要使用 setTimeout 或 setInterval :

function sendEmailStepByStep(imageAddress, counts) {
$(".feature div").append("<br />Please wait...<div class='feature_process'>&nbsp;</div>" + "<div class='feature_message'>Success: <span id='success_email'>0</span>, Failed: <span id='failed_email'>0</span></div>");

var i = 0;
var mailer = function () { // Create internal function instead of timer
$.ajax({
type: "GET",
url: "",
dataType: 'json',
data: {
group: 'packages',
do :'emailPackageUsingAjax',
image: imageAddress,
num: i
}
}).done(function (response) {
console.log('success');
console.log(response);
$("#success_email").html(response.Success);
$("#failed_email").html(response.Failed);
i = i + response.Success + response.Failed;
if (i < counts && response.Finish != 'true') {
mailer(); // if count is less and not finished, invoke function again
}
}).fail(function (response) {
$(".feature_message").append(response.responseText);
console.log("error");
console.log(response);
})
};

mailer(); // First invocation of function
}

使用上述技术将确保仅在前一批完成后才发送下一批,即使需要超过 1 秒(如您设置的超时时间)。

关于php - 在jquery中为ajax调用创建循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26670920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com