2012-05-14 63 views
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人。

歡迎任何建議/建議,謝謝!

回答

1

我認爲這正是你的問題。由於請求是異步的,因此您無法控制它們的執行順序。您必須同步您的請求並避免多個請求,也就是說,如果沒有掛起的請求,您只能執行一個新的請求,否則無法控制每個請求的回調何時被觸發。

+0

謝謝你的回答@woozy。你如何建議這樣做?在允許用戶與之交互之前,是否同步請求不會導致頁面等待每個請求完成?我們不想阻止用戶在頁面與服務器交互時發出出價 - 他們不應該意識到這種情況甚至發生。 – FluffyKitten

+0

請求同步不會影響頁面交互,因爲它們在後臺運行。我建議你在每個請求回調上嘗試運行新的請求,而不是每秒運行一次。 – woozy

+0

對不起,我被告知使用SJAX會有這種效果,所以我甚至沒有看到同步請求。什麼是最好的方法 - 在成功和錯誤回調函數中調用setTimeout?它也需要改變流程的邏輯 - 無論如何,我們每秒都在調用服務器,所以我們也選擇了返回服務器時間。現在計時器不再每秒倒計時,所以我需要一個單獨的倒數計時器,並且必須將這與服務器時間同步,因爲js倒計時不準確。所有參與者儘可能同步至關重要。 – FluffyKitten