我放弃了试图一次完成处理,并让它在每发送一次x后都返回。
两条路, /SMS?动作=发送 /SMS?行动=状态
假设发送路径开始发送通过REST API调用万条短信。
我通过ajax打电话给那个页面。
然后每隔几秒钟拨打一次/ sms?action = status以查看进度如何进展并更新进度栏。
如果没有消息正在发送,status路径返回false。
结果发生的是,对SEND路径的ajax调用获得了ajax成功:即使我知道该脚本需要1分钟以上才能完成执行,但几乎立即调用该函数。
我的进度条永远不会显示,因为在发送调用完成之前,状态ajax调用(它处于具有几秒延迟的设置间隔内)似乎永远不会被调用。
我试图把相关的代码放在这里,但它可能没有清楚,因为它应该没有所有的上下文。
var smsInterval = 0;
var smsSending = false;
$(document).ready(function() {
var charCount = 0;
var smsText = "";
var smsTotal = <?php echo $options["smsTotal"]; ?>;
smsStatus();
smsSending = true;
smsInterval = setInterval("smsStatus()", 5000);
$("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
也许我不清楚,具体细节并不重要,2个Ajax调用,一个启动一个过程需要一两分钟,并发送一堆电子邮件或短信,另一个Ajax调用,可以获取已发送的消息数量,或百分比或其他。在进程调用结束之前,状态调用似乎不会发生。这就是我想要解决的问题。 –
2011-04-22 13:40:02