2013-10-27 54 views
3

所以我開始了一個項目,在那裏我想做一個在線ajax聊天,但我不想使用jQuery JSON,COMET等等。我正在尋找純粹的JavaScript,沒有圖書館沒有框架。純javascript聊天對話

好消息是,我已經開始聊天,它工作正常。爲什麼我要發表這篇文章?因爲我無法找到任何純粹的JavaScript解決方案來進行長輪詢。目前我正在使用setInterval方法來「詢問」數據庫以發送數據庫中的任何內容。現在,當我得到響應時,我該如何執行我的ajax請求? (長輪詢)。

請記住,我不是在尋找一個jQuery解決方案或你有什麼..我使用純JavaScript和PHP。沒有框架或圖書館。

在此先感謝。

+0

這裏是一個jQuery的例子,你只需要取消它的jQuery :http://stackoverflow.com/a/333884/600135 – kol

+0

我其實已經檢查了這個線程。但問題是,我不能「un-jQuery」它,這就是爲什麼我要求一個純粹的JS解決方案:-)你看,jQuery的「成功:」部分可能是我正在尋找的。但我不知道沒有jQuery,看起來像什麼 –

+0

如果人們有了它們,仍然需要一些答案。 –

回答

0

我相信這是比較接近你想找的 - 參照上NETTUTS香草JS AJAX教程加:

load('test.txt', function(xhr) { 
    document.getElementById('container').innerHTML = xhr.responseText; 
    // you would obviously custom tailor this peice to utilize your specific data 
}); 

function load(url, callback) { 
    var xhr; 

    if(typeof XMLHttpRequest !== 'undefined') xhr = new XMLHttpRequest(); 
    else { 
     var versions = ["MSXML2.XmlHttp.5.0", 
         "MSXML2.XmlHttp.4.0", 
         "MSXML2.XmlHttp.3.0", 
         "MSXML2.XmlHttp.2.0", 
         "Microsoft.XmlHttp"] 

     for(var i = 0, len = versions.length; i < len; i++) { 
      try { 
       xhr = new ActiveXObject(versions[i]); 
       break; 
      } 
      catch(e){} 
     } // end for 
    } 

    xhr.onreadystatechange = ensureReadiness; 

    function ensureReadiness() { 
     if(xhr.readyState < 4) { 
      return; 
     } 

     if(xhr.status !== 200) { 
      return; 
     } 

     // all is well  
     if(xhr.readyState === 4) { 
      callback(xhr); 
     }    
    } 

    xhr.open('GET', url, true); 
    xhr.send(''); 
} 

,你可以建立自己的「成功」處理程序放到基於「保障準備就緒」返回值

heres a link to the nettuts tutorial

and another to the MDN ajax API docs

+0

這種方法的缺點之一是對象的引用會隨着你是否使用ie或者一個真實的web瀏覽器而變化...... ActiveXObject vs XMLHttpRequest - 另一個原因是我不能等待瀏覽器的戰爭結束,喂,即回版用戶 – Joe

+0

雖然這是一個很好的教程,但它並不能真正覆蓋我的需求,因爲我基本上已經寫過這個人正在教什麼。只需要長輪詢部分。防止我的服務器獲得太多流量的部分。我正在使用setInterval函數來不斷詢問數據庫中是否有任何內容。但長輪詢應該保持連接打開直到數據庫刷新 –