2014-02-06 91 views
1

我正在按照下面的示例不斷刷新與MySQL表的div。刷新div內的鏈接不工作

http://techoctave.com/c7/posts/60-simple-long-polling-example-with-javascript-and-jquery

我使用AJAX的完整和超時參數刷新DIV而不是使用的setInterval和setTimeout的的。

我遇到的問題是返回的數據可能包含鏈接,點擊時這些鏈接不工作。我相信問題可能是div不斷刷新,因此我忽略了點擊。你如何允許刷新div中的鏈接?它適用於setinveral和settimeout,但我想使用長輪詢來實現實時更新。

這是我的代碼。

// get page url variables 
function getUrlVars() { 
    var vars = {}; 
    var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) { 
     vars[key] = value; 
    }); 
    return vars; 
} 

// set var for parent id to scroll to 
var tid = getUrlVars()["tid"]; 
var pid = getUrlVars()["pid"]; 

(function poll(){ 

    // get latest page 
    $.ajax({ 
     url: "ajax.tickets_details.php?tid=" + tid, 
     type: 'GET', 
     cache: false, 
     success: function(html) { 

      // print results from get in div 
      $("#ticket_updates").html(html); 

     }, 
     complete: poll, 
     timeout: 30000 

    }); 

})(); 

謝謝!

+0

「我遇到的問題是返回的數據可能包含鏈接,點擊時這些鏈接不起作用。」你能指定他們是什麼方式*不工作*?他們是否成功轉化爲錨標籤並變得可點擊? – Kippie

+0

它們被格式化爲鏈接並且可點擊,但不會遵循href。 –

+0

鏈接返回時的外觀如何?你能調試你的腳本,並複製一個返回的鏈接,並在這裏發佈? – Avisari

回答

0

我剛剛閱讀了該教程,它基於虛假信息。

本教程中說:

這意味着我們的查詢功能,不會再次調用,直到兩個 AJAX調用完成和(AT-至少)三十(30)秒過去了。

這是不正確的。如果您的請求返回< 30s 它會立即再次觸發,從而導致您的問題。超時的實際定義爲:

設置請求的超時時間(以毫秒爲單位)。這將覆蓋使用$ .ajaxSetup()設置的任何全局超時 。在進行$ .ajax調用時,超時期間開始 ;如果 進程中有多個其他請求並且瀏覽器沒有可用連接,則可能有 請求超時請求才能發送。在下面的jQuery 1.4.x和 中,如果 請求超時,則XMLHttpRequest對象將處於無效狀態;訪問任何對象成員可能會拋出異常。僅在Firefox 3.0+中,腳本和JSONP請求不能被 取消超時;即使在 超時期後到達,腳本也會運行。

因此,這意味着,如果請求花費超過30秒,將取消等待處理程序(不調用本身,這將繼續,但在JavaScript處理會走出去的範圍)。

甚至有評論強調這一缺陷: enter image description here

我會找到一個新的教程作爲一個似乎是在說nonesense。這項技術根本沒有做「服務器推送」。只有網絡套接字可以從服務器推送。 HTTP 1.1根本不支持任何服務器推送方法。

+0

非常感謝。給出的例子不適用於我,但我已經將setTimout(function,30000)添加到我的函數的底部來重複。 –