2011-06-14 48 views
1

我已經實現在jQuery的彗星客戶如下:jQuery的asynchrone請求

$(document).ready(function() { 
    comet(); 
}); 

function comet(){ 
    var cometJSON = { 
      'comet': 'id' 
     } 
    $.ajax({ 
     type: "POST", 
     url: "http://localhost:8080/comet", 
     data: JSON.stringify(cometJSON), 
     async: true, /* Set async request*/ 
     cache: false, 
     timeout:50000, /* Timeout in ms */ 

     success: function(data){ 
      console.log('suc'); 
      eventReceived(data); 

     }, 
     error: function(jqXHR, textStatus, errorThrown){ 
      console.log("error: "+textStatus); 

     }, 
     complete: function(jqXHR, textStatus){ 
      console.log("Send new comet!"); 
      comet(); 
     } 
    }); 
}; 

一切工作正常,但我一直吵飛旋在我的瀏覽器選項卡,我的狀態潘內爾總是顯示:等待本地主機,怎麼能我解決這個問題?

+0

你不需要'JSON.stringify'你的'數據'參數 - 它期望一個JavaScript對象 – mkilmanas 2011-06-14 21:10:01

+0

我需要服務器端的字符串 – 2011-06-14 21:11:20

+0

如果您使用的是Chrome或Firefox + Firebug(例如),請檢查JavaScript控制檯是否有錯誤。問題中的頁面是否由您製作AJAX文章的服務器託管?如果你在本地加載頁面,你可能會遇到與[跨域XMLHTTPRequests](http://en.wikipedia.org/wiki/XMLHttpRequest#Cross-domain_requests) – andyb 2011-06-14 21:13:02

回答

4

微調控制器顯示正在進行的連接 - 收到答案後,您在complete部分立即觸發新請求,因此存在正在進行的連接mos (幾乎總是)。爲了避免它,你需要延遲一個新的請求之前 - setTimeout(comet, 1000)聽起來像一個很好的替代最後comet();

+0

謝謝,現在它完美! – 2011-06-14 21:21:14

1

我實現了同樣的事情,而回,衝進了同樣的問題:

https://github.com/tenorviol/cometjax

爲了解決這個永遠微調的問題,把超時您最初的Ajax調用,如:

$(document).ready(function() { 
    setTimeout(function() { 
    comet(); 
    }, 10); 
});