私は、メールを送信するスクリプトにajax要求を行うことによって、多くの受信者にニュースレターメールを送信しようとしています。以前のリクエストが完了したことを確認するために(ブラウザの同時リクエストの最大数に達しないように)、私は再帰的ループ関数を使用します。再帰的ループによる同期ajax要求
この質問には複数のバリエーションがありますが、私は私を助けてくれる回答は見つかりませんでした。
var receiverarray = <?php echo json_encode($receiverarray); ?>; // All data is correctly received from PHP
var nrofreceivers = '<?php echo count($receiverarray); ?>';
nrofreceivers = parseInt(nrofreceivers);
function sendmailreceivers(receiverarray, callback) {
try {
var a = 0;
recur_loop(a);
function recur_loop(i) {
var num = i;
if (num < nrofreceivers) {
var count = num + 1;
var percentage = (count/receiverarray.length) * 100;
percentage = Math.round(percentage);
var loadingtext = String(count) + " van " + String(nrofreceivers) + " (" + String(percentage) + "%)";
$('#loadingtext').html(loadingtext);
var thisreceiverarray = receiverarray[num];
$.ajax({
type: "POST",
url: "https://www.domain.com/scripts/sendmail.php", // Script works fine
data: {
'from_mail': '<?php echo $webmastermailaddress; ?>',
'from_name': 'Webmaster name',
'to_mail': thisreceiverarray.email,
'to_name': thisreceiverarray.name,
'reply_name': 'Business name',
'reply_mail': 'Business mail address',
'diff_mailer': '',
'mail_content': '<HTML>The html mail content</HTML>',
'mail_subject': '<?php echo $subject; ?>'
},
success: function(){
recur_loop(count);
},
error: function() {
throw "Error!";
}
});
}
};
callback();
}
catch(err) {
throw "Error!";
}
}
これは最初の3つのメールアドレスのため正常に動作します:私が試した何
。次に、未知の理由で関数が終了し、コールバックが次の関数が実行されることを確認します(ここで私はユーザーをありがとうページにリダイレクトします)。
関数はエラーなく終了するので、すべてのメールが送信されたように見えますが、実際には3つのメールのみが送信されます。
私はすでに回答を探して解決しようと多くの日を費やしましたが、運がありません。コンソールにエラーはありませんか?
機能が途中で終了するのはなぜですか?
コードは、シミュレートされた要求に対して期待どおりに機能するように見えます。デベロッパーコンソールの[ネットワーク]タブには何が表示されますか?いくつのリクエストが実際に送信されますか?サーバー側で問題が発生している可能性があります。つまり、要求は送信されていますが、メールサーバーによって処理されていませんか?それ以上の詳細がなければ、誰もができることは推測です。 – Roberto