Internet explorer Jquery SetInterval在Chrome和IE中不能正常工作,但在FireFox中可以正常工作

Internet explorer Jquery SetInterval在Chrome和IE中不能正常工作,但在FireFox中可以正常工作,internet-explorer,google-chrome,jquery,setinterval,Internet Explorer,Google Chrome,Jquery,Setinterval,我下面有jquery/javascript,它在FireFox中运行良好,但在Chrome和IE中运行不太好 <script type="text/javascript"> (function($) { $(document).ready(function() { setInterval(function() { $.ajax({ type: 'GET'

我下面有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>

(函数($){
$(文档).ready(函数(){
setInterval(函数(){
$.ajax({
键入:“GET”,
url:“/items/xml/?page={{pageNo}}”,
数据类型:“html”,
成功:函数(html、textStatus){
$('table.items')。替换为(html);
},
错误:函数(xhr、textStatus、errorshown){
如果(xhr.status!=0)
{
$('table.items').replaceWith(“

发生错误:”+(ErrorSprown?ErrorSprown:xhr.status)); } } }); }, 1000); }); })(jQuery);

我更新了jquery版本。它是v1.10.2,就像我在另一个问题上看到的那样。 遗憾的是,这没有起作用。Chrome在大多数情况下都能工作,但有时它与IE完全不同,而且速度非常慢

这和我的代码有关系吗?或者这是Chrome和IE的问题?因为FireFox很好

编辑:

我应该很清楚,代码正在刷新以更新页面,以查看数据库中可能发生的更改。Ie添加了一个新项目,此代码确保在刷新后立即看到它,而无需让某人按F5或重新加载页面。
我的意思是,它只是停留在说它正在用chrome将信息加载到页面上,但大多数时候都没有显示页面上项目的信息,或者这样做的速度非常慢。IE也一样,FireFox也没问题

更新答案

您已经更新,表示问题在于您没有看到更新的信息

您使用的是HTTP
GET
,这意味着如果浏览器愿意,欢迎它缓存调用的结果,除非您在响应中指定适当的缓存控制头。一些浏览器缓存XHR结果,其他浏览器则不缓存

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


原始答案

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

您的代码将大约每秒启动一次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);
(函数($){
$(文档).ready(函数(){
函数doRequest(){
$.ajax({
键入:“GET”,
url:“/items/xml/?page={{pageNo}}”,
数据类型:“html”,
成功:函数(html、textStatus){
$('table.items')。替换为(html);
},
错误:函数(xhr、textStatus、errorshown){
如果(xhr.status!=0){
$('table.items').replaceWith(“

发生错误:”+(error抛出?error抛出:xhr.status)); } },


完成:scheduleRequest/更新的答案

您已经更新,表示问题在于您没有看到更新的信息

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

最好的办法是让
GET
返回适当的头。但是,您也可以使用
ajax
调用中jQuery的
cache:false
标志,强制
GET
绕过缓存


原始答案

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

您的代码将大约每秒启动一次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);
(函数($){
$(文档).ready(函数(){
函数doRequest(){
$.ajax({
键入:“GET”,
url:“/items/xml/?page={{pageNo}}”,
数据类型:“html”,
成功:函数(html、textStatus){
$('table.items')。替换为(html);
},
错误:函数(xhr、textStatus、errorshown){
如果(xhr.status!=0){
$('table.items').replaceWith(“

发生错误:”+(error抛出?error抛出:xhr.status)); } },


完成:scheduleRequest//“不起作用”不是描述技术问题的适当方式。请描述您预期会发生什么,确切地说正在发生什么,以及(除非很明显)为什么您认为这不正确。您预期的行为是什么?您得到的行为是什么?“不起作用”这不是描述一个技术人员的适当方式吗