1
我正在開發類似於拍賣的功能,使用jQuery,AJAX,PHP和mySQL。AJAX結果可能不同步並導致輪詢結果的差異?
Ajax每秒都會訪問服務器以獲取最近的出價,並且在此次調用期間,我們還會從服務器獲取剩餘時間以使所有參與者保持同步。
我有兩個問題:
1)偶爾剩餘時間閃爍回到以前的時間值的幾分之一秒。這是否可以解決異步結果不同步的問題?相關代碼的
摘錄:
function dotimer() {
updateScreen();
setTimeout('dotimer()',1000);
}
function updateScreen(){
$.ajax({
type : 'POST',
url : 'getinfo.php',
dataType : 'json',
data: { /* various params are passed to php */ },
success : function(data){
/* other info processed here...*/
$("#countdowntimer").html(data.secondsremaining);
},
error : function(XMLHttpRequest, textStatus, errorThrown) {}
});
}
getinfo.php:
$return['secondsremaining'] = strtotime($end_time)-strtotime("now");
/* get other infor from database... */
echo json_encode($return);
(setTimeout和setInterval的兩個有相同的結果)
2)是每一個訪問數據庫第二過度?我看不到另一種方法來確保信息是最新的。有一個更好的方法嗎? 拍賣時間較短(30分鐘),我們預計不會超過10人。
歡迎任何建議/建議,謝謝!
謝謝你的回答@woozy。你如何建議這樣做?在允許用戶與之交互之前,是否同步請求不會導致頁面等待每個請求完成?我們不想阻止用戶在頁面與服務器交互時發出出價 - 他們不應該意識到這種情況甚至發生。 – FluffyKitten
請求同步不會影響頁面交互,因爲它們在後臺運行。我建議你在每個請求回調上嘗試運行新的請求,而不是每秒運行一次。 – woozy
對不起,我被告知使用SJAX會有這種效果,所以我甚至沒有看到同步請求。什麼是最好的方法 - 在成功和錯誤回調函數中調用setTimeout?它也需要改變流程的邏輯 - 無論如何,我們每秒都在調用服務器,所以我們也選擇了返回服務器時間。現在計時器不再每秒倒計時,所以我需要一個單獨的倒數計時器,並且必須將這與服務器時間同步,因爲js倒計時不準確。所有參與者儘可能同步至關重要。 – FluffyKitten