2011-04-18 42 views
0

如果修改了mySQL字段,javascript是否可以自動更新?我假設這基本上轉化爲某種特定SQL記錄的常量查詢。更改sql記錄時的javascript autoupdate(或等於某個特定值)

舉一個例子,假設我正在使用PHP和帶有mySQL背景的jquery製作一個簡單/多人/ tic-tac-toe。

我希望井字遊戲頁面由jquery支持,以便用戶不必進行頁面刷新。

兩個用戶會迷上,遊戲開始。用戶2在用戶1考慮放置X的位置時等待。當用戶1單擊一個正方形以包含X時,我希望用戶2將他們的屏幕自動更改爲反映 - 而不必按任何按鈕來檢查更新。

+0

這個! http://stackoverflow.com/questions/333664/simple-long-polling-example-code – jeremy 2011-04-18 22:57:15

回答

0

您可以通過AJAX每隔X秒(例如10秒)輪詢服務器以檢查它是否已更改。 Theres沒有(簡單)將數據推送到客戶端的方式。

示例代碼:

function checkStatus() { 
    setTimeout('checkStatus()',10000); 
    $.ajax({ 
     url: "checkStatus.php", 
     success: function(data){ 
       //Code to handle change goes here 
     } 
  }); 
} 
setTimeout('checkStatus()',10000); 
0

你有兩個主要的解決方案,輪詢或websockets(它並不完全支持所有瀏覽器btw),都涉及與後端進行通信。我不打算介紹websocket,但是它是一種即將到來的技術,可以保持從前端到後端的開放連接。另一種選擇是使用諸如Comet之類的東西,它允許您長時間保持HTTP連接打開。

您擁有的另一個解決方案是輪詢,其中您每隔x秒發出一次ajax請求以「輪詢」更改。

0

這可以使用Ajax完成(使用JQuery Ajax)。它可以每隔幾秒刷新一次以使用數據庫中的最新內容更新頁面。這種方法適用於少數用戶的小規模,但在服務器資源上非常耗費,因爲即使新數據不可用,它也會不斷髮送和接收數據。

更好的選擇可能是使用node.js和socket.io來支持大規模的實時進程。

0

是 - 一個方法是使用一個長輪詢彗星。從本質上講,這是通過從服務器發出異步(通常是使用AJAX)請求並等待響應來實現的。比如說,等一小時。當它收到響應時,它會「完成」請求,然後以相同的方式發送另一個請求。

雖然還有很多其他方法 - 請查看「推技術」。

0

我一直在嘗試使用setTimeout,但沒有成功。我用setInterval,它似乎像一個魅力。

代碼如下:

function waitForMsg(){ 

    $.ajax({ 
     url: "tictac_code1.php", 
     type: 'POST', 
     data: 'longpoll=1', 

     async: true, /* If set to non-async, browser shows page as "Loading.."*/ 
     cache: false, 
     timeout:10000, /* Timeout in ms */ 

     success: function(data){ /* called when request to barge.php completes */ 

      $('#loggedinnames').empty(); 
      $('#loggedinnames').append(data); 
      setInterval(waitForMsg, 10000); 
      //setTimeout(
      // 'waitForMsg()', /* Request next message */ 
      // 1000 /* ..after 1 seconds */ 
      //); 

     }, 
     error: function(XMLHttpRequest, textStatus, errorThrown){ 
      //alert("error in waitformsg."); 
      addmsg("error", textStatus + " (" + errorThrown + ")"); 
      setInterval(waitForMsg, 10000); 


      //setTimeout(
       // 'waitForMsg()', /* Try again after.. */ 
       // "15000"); /* milliseconds (15seconds) */ 


     } 
    }); 
}; 

$(document).ready(function(){ 
    waitForMsg(); /* Start the inital request */ 
}); 
相關問題