注意:如何處理多個Ajax請求
我放棄了試圖一次完成處理,並讓它在每發送一次x後都返回。
兩條路, /SMS?動作=發送 /SMS?行動=狀態
假設發送路徑開始發送通過REST API調用萬條短信。
我通過ajax打電話給那個頁面。
然後每隔幾秒鐘撥打一次/ sms?action = status以查看進度如何進展並更新進度欄。
如果沒有消息正在發送,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);
}
});
}
也許我不清楚,具體細節並不重要,2個Ajax調用,一個啓動一個過程需要一兩分鐘,併發送一堆電子郵件或短信,另一個Ajax調用,可以獲取已發送的消息數量,或百分比或其他。在進程調用結束之前,狀態調用似乎不會發生。這就是我想要解決的問題。 – merlincam 2011-04-22 13:40:02