刷新div中的链接不起作用

时间:2014-02-06 09:57:29

标签: javascript jquery html ajax

我按照下面的示例继续使用mysql表刷新div。

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

我正在使用ajax的complete和timeout参数刷新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

    });

})();

谢谢!

1 个答案:

答案 0 :(得分:0)

我刚刚阅读了该教程,它基于虚假信息。

本教程说:

  

这意味着我们的poll函数不会再被调用   ajax呼叫完成并且(至少)三十(30)秒已经过去。

这不是真的。如果您的请求以< 30秒它会立即再次发射,从而导致您的问题。超时的实际定义是:

  

设置请求的超时(以毫秒为单位)。这将覆盖   使用$ .ajaxSetup()设置的任何全局超时。超时时间开始   在$ .ajax调用的点上;如果有其他几个请求   进度和浏览器没有可用的连接,这是可能的   请求在发送之前超时。在jQuery 1.4.x和   如下所示,XMLHttpRequest对象将处于无效状态   请求超时;访问任何对象成员可能会抛出一个   例外。仅在Firefox 3.0+中,脚本和JSONP请求不能   超时取消;即使脚本到达,脚本也会运行   超时期限。

所以这意味着如果请求超过30秒,它将取消等待处理程序 (不是调用本身,这将继续,但javascript处理程序将超出范围)。

甚至有一条评论强调了这个缺陷: enter image description here

我会找到一个新的教程,因为那个教程似乎在说废话。这种技术根本不是“服务器推送”。只有Web套接字可以从服务器推送。 HTTP 1.1根本不支持任何服务器推送方法。