ПРИМЕЧАНИЕ:
Я отказался от попыток выполнить обработку за один раз и просто позволил ей возвращаться после каждого x числа отправлений.
Два пути, / sms? Action = send / sms? Action = status
Предположим, что путь отправки начинает отправку 10 000 SMS-сообщений через вызовы REST API.
Iпозвоните на эту страницу через ajax.
Затем каждые несколько секунд я звоню / sms? action = status, чтобы посмотреть, как идет процесс, и обновить индикатор выполнения.
Путь состояния возвращает значение false, если сообщения не отправляются.
В конечном итоге происходит то, что вызов ajax на путь SEND получает функцию ajax success: вызывается почти мгновенно, хотя я знаю, что сценарийНа выполнение выполнения уходит более 1 минуты.
Мой индикатор выполнения никогда не отображается, поскольку вызов состояния ajax (который находится в заданном интервале с задержкой в несколько секунд) никогда не вызывается, пока не завершится вызов отправки.
Я пытаюсь поместить соответствующий код здесь, но он может быть не таким ясным, как это должно быть без всего контекста.
<script type="text/javascript">
var smsInterval = 0;
var smsSending = false;
$(document).ready(function() {
var charCount = 0;
var smsText = "";
var smsTotal = <?php echo $options["smsTotal"]; ?>;
<?php if($options["sending"]): ?>
smsStatus();
smsSending = true;
smsInterval = setInterval("smsStatus()", 5000);
<?php endif; ?>
$("span#smsadmin_charcount").html(charCount.toString());
//send button
$("div#smssend").click(function() {
if(smsSending == true) {
return false;
}
smsStatus();
var dataString = $("#smsadmin_form").serialize();
smsSending = true;
$("div#smssend").html("Sending...");
$.ajax({
type: "POST",
url: "<?php echo $base_url; ?>/admin/sms",
data : dataString,
success: function(data) {
},
error: function(request, error) {
$("div.notice.sms").html("ERROR "+error+ "REQUEST "+request);
}
});
});
});
function smsStatus() {
var dataString = "smsaction=status&ajax=true";
$.ajax({
type: "POST",
url: "<?php echo $base_url; ?>/admin/sms",
data : dataString,
success: function(data) {
//data being false here indicates the process finished
if(data == false) {
clearInterval(smsInterval);
var basewidth = $("div.sms_progress_bg").width();
$("div.sms_progress_bar").width(parseInt(basewidth));
$("div.sms_progress_notice").html(parseInt(100) + "% Complete");
smsSending = false;
$("div#smssend").html("Send To <?php echo $options["smsTotal"]; ?> Recipients");
} else {
var pcomplete = parseFloat(data);
$("div.sms_progress_bg").show();
var basewidth = $("div.sms_progress_bg").width();
$("div.sms_progress_bar").width(parseInt(basewidth * pcomplete));
$("div.sms_progress_notice").html(parseInt(pcomplete * 100) + "% Complete");
}
},
error: function(request, error) {
$("div.notice.sms").html("ERROR "+error+ "REQUEST "+request);
}
});
}