2011-02-09 57 views
1

嘿,夥計們,有沒有更有效的方法來做到這一點?替代使用setTimeout和AJAX?

setInterval('getAllWords()', 2000); 

function getAllWords() { 
    $.ajax({ 
     type: "GET", 
     url: "queries.php", 
     data: "action=all", 
     success: function(data){ 
      dataArray = data.split('|'); 
      $('#words').html(''); 
      for (var i = 0; i < dataArray.length; i++) { 
       if ((dataArray[i]).length > 1) { 
        $('ul').append('<li>' + dataArray[i] + '</li>'); 
       } 
      } 
     } 
    }); 
} 

詳述(?)
這基本上每2秒連接到數據庫,並檢查更新的話,有沒有實現push要求什麼,以儘量減少數據庫活動的一種簡單的方法?

更多信息:
我的主機不支持AJAX推送服務器安裝,他們將不會安裝一個適合我


:(

+1

你是什麼意思? – 2011-02-09 10:40:10

+0

更新了我的問題:) – 2011-02-09 10:45:37

+0

檢查出APE http://www.ape-project.org/ – 2011-02-09 11:13:51

回答

1

如果您不能安裝推送服務器,看看這個黑客:

運行一個無限循環,只有將回答您的Ajax請求一旦有新的東西(而(真){檢查更新話})。

在你的Ajax代碼,你可以簡單地再啓動的請求,並儘快它完成啓動一個新的(如的readyState == 4 - >啓動新的請求)

-1

你可以使用setInterval()功能,但是該方法的效率取決於您的要求。

請讓我知道您的要求。

0

如果查詢緩存在您的數據庫服務器上啓用,那麼這不應該擔心。查詢cacher不會加載數據庫,直到更新單詞字段。

在其他筆記,

我更喜歡使用的setTimeout比使用的setInterval。如果服務器的響應需要超過2秒才能返回,該怎麼辦? 即使先前請求未完成,setInterval也會再次發出請求。

所以, 我會用這個

function getAllWords() { 

    $.ajax({ 
     type: "GET", 
     url: "queries.php", 
     data: "action=all", 
     success: function(data){ 
      dataArray = data.split('|'); 
      $('#words').html(''); 
      for (var i = 0; i < dataArray.length; i++) { 
       if ((dataArray[i]).length > 1) { 
        $('ul').append('<li>' + dataArray[i] + '</li>'); 
       } 
      } 

      setTimeout(getAllWords,2000); 
     } 
    }); 
} 

getAllWords(); 
0

到minize分貝的活動,你可以:

  • 使用記錄保存的東西是否在您的關鍵字改變,而不是直接檢查關鍵字「表」。

OR

  • 使用應用範圍變量:不以PHP本身存在。但是,如果您的服務器上安裝了APC,則可以使用APC變量。