【问题标题】:Issue with Events on AJAX-heavy page重 AJAX 页面上的事件问题
【发布时间】:2008-12-08 23:54:44
【问题描述】:

我有一个使用 jQuery ajax 在页面加载后将成员计数加载到 divs 的 asp 页面。

它在 FireFox 中运行良好,并且适用于具有少量组的客户端。

对于拥有许多组 (500+) 的少数客户端,我在 IE 中遇到错误。 ajax 调用似乎是同步运行的,因为在每个 ajax 调用返回之前,点击事件不会注册。

对于大多数客户端来说,一系列 ajax 请求只是 1 个请求。它仅被分解为具有大量组的客户端的多个请求。

现在,我看到了如果在加载 DOM 后添加链接,$("a").click 函数未绑定的错误。不起作用的链接不是由 AJAX 加载的,它们不属于此类别。

这是伪代码:

ready()
{
    // count the number of groups that this user has, adding the ids to a list
    if( count < 50 )
    {
        runAjax();
    }
    else
    {
        // this calls the ajax request on groups of 50 ids
        // it pauses briefly after each request by using setTimeout to call the next
        runAjaxRecursively();
    }
}

这里是ajax请求:

// run the HTTPRequest
$.ajax({
    async: true,
    type: "POST",
    url: "emailcatcount.asp?idList="+idList,
    data: "idList="+idList,
    dataType: "html",
    success: function(html) { // blah blah blah }
});

无论如何,代码运行良好,因此请将任何错误视为拼写错误。唯一的问题是,在 IE 中,直到每个 ajax 调用都返回后才会触发点击事件。

有谁知道为什么会发生这种情况?请注意,我将 async 设置为 true。

这和jQuery的ready事件在IE中的处理方式有什么关系吗?

我很困惑,并且在这方面花了几天时间,所以任何想法都值得赞赏。

【问题讨论】:

    标签: jquery ajax internet-explorer events


    【解决方案1】:

    你的问题是你没有给浏览器时间,尝试在递归循环中添加一点 setTimeout 给浏览器时间来处理其他事件,记住你只有一个线程可以玩。最好只进行一次调用并将 jtemplates 与 json 一起使用来处理数据并呈现标记,而不是返回繁重的 html。

    另外,您提到的错误不是错误,jQuery 仅绑定当时存在的元素的处理程序。如果您有动态内容,最好使用事件委托来处理动态元素的点击事件。这样,您无需显式绑定每个元素,而是将 click 事件绑定到静态容器。然后,您可以查询 event.target 以查看它是否是调用事件的所需元素之一,如果是,则处理所需的行为。好处是您不会为 dom 带来多个绑定事件和动态内容工作的负担。

    【讨论】:

    • json 和 1 ajax 调用方式怎么样:)
    • 或者,如果您无法链接或模拟失败行为的示例,我可以调试
    • 如果我只使用 1 个 ajax 调用,那么返回时间太长 - 用户在结果返回之前已经浏览离开页面。失败的行为是冻结。在所有请求都返回之前,它不会转到点击的链接。
    • 我很乐意将您链接到实际的错误 - 但我不得不放弃客户信息
    • Paul 如果您使用 json,它不会花费那么长时间(请记住,它比 html 少 80/90% 的脂肪),除非您谈论的是愚蠢的数据量,在这种情况下可能需要重构实际需要什么!!!
    【解决方案2】:

    成功函数是否更新表格内容? IE大表渲染相当的惨。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-08
      • 1970-01-01
      • 2020-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多