0

我下面的 jquery/javascript 在 FireFox 中运行良好,但在 Chrome 和 IE 中运行不佳

<script type="text/javascript">
        (function($) {
         $(document).ready(function() {
             setInterval(function() {
                $.ajax({
                    type: 'GET',
                    url: "/items/xml/?page={{ pageNo }}",
                    dataType: 'html',
                    success: function(html, textStatus) {
                        $('table.items').replaceWith(html);
                    },
                    error: function(xhr, textStatus, errorThrown) {
                        if (xhr.status != 0)
                        {
                        $('table.items').replaceWith("<p />An error occurred: " + ( errorThrown ? errorThrown : xhr.status ));
                        }
                    }
                });
             }, 1000);
             });
         })(jQuery);
    </script>

我更新了 jquery 版本。它是 v1.10.2,就像我在另一个问题上看到的那样。可悲的是,这没有奏效。Chrome 大部分时间都可以工作,但有时它与 IE 完全不同,而且速度非常慢。

它与我的代码有关还是它在 Chrome 和 IE 中的问题?因为火狐很好。

编辑:

我应该清楚代码正在刷新以更新页面以查看可以在数据库中进行的更改。即添加了一个新项目,并且此代码确保它在刷新后立即被看到,而无需有人按下 F5 或重新加载页面。我的意思是它只是说它正在将信息加载到 chrome 中的页面,但大多数时候没有显示有关页面上项目的信息,或者这样做真的很慢。与 IE 相同。在 FireFox 中再次没有问题。

4

1 回答 1

3

更新答案

您已经更新说问题是您没有看到更新的信息。

您正在使用 HTTP GET,这意味着欢迎浏览器缓存调用结果,除非您在响应中指定适当的缓存控制标头。有些浏览器会缓存 XHR 结果,有些则不会。

您最好的选择是使GET返回适当的标题。但是,您也可以强制GET绕过缓存,在调用时使用 jQuery 的cache: false标志。ajax


原始答案

您还没有说“不起作用”是什么,但是如果您看到更新以奇怪的间隔发生,那就不足为奇了。

您的代码将大约每秒启动一次 ajax 请求(!)。该 ajax 请求将在一段时间后完成。之后多少将完全取决于用户的网络连接。所以事情会很快变得混乱,可能会有多个未完成的请求,多个响应一个接一个地出现,等等。

我建议仅在当前请求完成时启动下一个请求,如下所示:

(function ($) {
    $(document).ready(function () {
        function doRequest() {
            $.ajax({
                type: 'GET',
                url: "/items/xml/?page={{ pageNo }}",
                dataType: 'html',
                success: function (html, textStatus) {
                    $('table.items').replaceWith(html);
                },
                error: function (xhr, textStatus, errorThrown) {
                    if (xhr.status != 0) {
                        $('table.items').replaceWith("<p />An error occurred: " + (errorThrown ? errorThrown : xhr.status));
                    }
                },
                complete: scheduleRequest // <=== Schedule the next on completion
            });
        }

        function scheduleRequest() {
            setTimeout(doRequest, 1000);
        }

        scheduleRequest();
    });
})(jQuery);

我还建议,除非绝对必要,否则每秒一次太频繁地触发这样的网络事件。

于 2013-07-31T11:12:27.357 回答