注:
我放弃了尝试一次完成处理,并在每x次发送后让它返回。
两条路, / SMS?行动=送 / SMS?动作=状态
假设发送路径开始通过REST api调用发送10,000条短信。
我通过ajax调用该页面。
然后每隔几秒钟,我会调用/ sms?action = status来查看进度如何,并更新进度条。
如果没有发送消息,则状态路径返回false。
最终发生的事情是对SEND路径的ajax调用获得了ajax成功:几乎立即调用的函数,即使我知道脚本需要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);
}
});
}
答案 0 :(得分:0)
我可能会忽略这一点,但在$(“div #smssend”)中。点击你这一行:
smsStatus();
不应该是:
smsInterval = setInterval("smsStatus()", 5000);
和INSIDE成功:/ admin / sms的函数(数据)?
答案 1 :(得分:0)
如果发送部分发送10k消息,如果当前正在发送消息则状态返回true,如果在发送之间则返回false,则表示存在设计问题。
例如,应该显示的状态是什么?
如果状态是显示已发送的某个块的数量,那么您可以做的是提交要发送的消息(或地址),并获取该块的一些ID。
然后,当您要求提供状态时,传递该ID,您的服务器可以确定该组已发送了多少,并返回成功但未成功的号码,以及仍有多少号码待处理。如果你想获得想象力,你也可以根据有多少其他请求待定,在完成之前给出一个指示它可能还有多长时间。
但是,你如何处理这个问题取决于你在要求状态时的期望。