【问题标题】:jQuery autocomplete on sequential call throws JS error on IE7 standalone顺序调用的 jQuery 自动完成在 IE7 独立时引发 JS 错误
【发布时间】:2011-08-10 00:02:52
【问题描述】:

我们有一个文本框加上 jQuery UI Autocomplete v1.8.14

它基本上工作得很好,除了 IE7 独立的某些场景之外没有错误。假设用户正在输入一个字母,并且第一个 AJAX 请求发出了自动完成结果。响应尚未返回,但用户输入了另一个字母。此时,默认情况下第一个请求被中止,第二个请求开始检索新搜索字符串的新结果。这是有道理的,因为它节省了带宽并损失了执行时间,但不幸的是它在 IE7 上失败了。

下图显示了在 Firefox 中使用 Firebug 会发生什么。基本上所有浏览器都能正常工作,除了 IE7(甚至 IE6 和 IE8)。

有人见过这样的东西吗?最终有人知道是否可以强制自动完成器完成已启动的请求而不是中止它们?还有其他想法吗?

非常感谢,非常感谢任何帮助!

【问题讨论】:

    标签: jquery jquery-plugins internet-explorer-7 internet-explorer-6 jquery-autocomplete


    【解决方案1】:

    我有一种预感,您只是在使用 source 选项的字符串值并为其提供 URL。如果一个正在进行中的小部件中止 AJAX 请求,您是正确的。 Check out this snippet 来自小部件的源代码:

    url = this.options.source;
    this.source = function(request, response) {
        if (self.xhr) {
            self.xhr.abort(); // <-- Problematic line.
        }
        self.xhr = $.ajax({
            url: url,
            data: request,
            dataType: "json",
            autocompleteRequest: ++requestIndex,
            success: function(data, status) {
                if (this.autocompleteRequest === requestIndex) {
                    response(data);
                }
            },
            error: function() {
                if (this.autocompleteRequest === requestIndex) {
                    response([]);
                }
            }
        });
    }
    

    如果您将字符串传递给 source 参数,您可以轻松地将其替换为手动执行 AJAX 调用的函数(并且您不会中止请求):

    source: function (request, response) {
        $.ajax({
            url: "your_url",
            data: request.term,
            dataType: "json",
            success: function(data, status) {
                response(data);
            }
        });
    }
    

    (未经测试,但应该能让你朝着正确的方向前进)

    【讨论】:

      【解决方案2】:

      我们最终解决了这个问题,将调用放入 try-catch 块并忽略在 IE7 中触发的错误。

      这可能不是完美的方法,但中止请求的好处对其余浏览器仍然有效。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-07-06
        • 1970-01-01
        • 2013-06-26
        • 1970-01-01
        • 2012-10-03
        • 2013-09-14
        • 1970-01-01
        相关资源
        最近更新 更多