Javascript ajax调用有时会被chrome取消

Javascript ajax调用有时会被chrome取消,javascript,jquery,ajax,google-chrome,Javascript,Jquery,Ajax,Google Chrome,我的ajax代码是 var auto_refresh = setInterval(function () { $.ajax({ type: 'post', url: 'lib/nav.php', data: 'c=autchk', success: function (result) { $('#test-div').html(result);

我的ajax代码是

var auto_refresh = setInterval(function () {
    $.ajax({
            type: 'post',
            url: 'lib/nav.php',
            data: 'c=autchk',
            success: function (result) {
                $('#test-div').html(result);
            },
            error: function (jqXHR, textStatus, errorThrown) {
                // I don't know how to display error message
                console.log('Error: '+jqXHR+' '+textStatus+' '+errorThrown);
            }
        });
}, 9000);
请求有时在到达超时之前被取消。 在chrome日志中,已取消请求的状态为暂停。然后,我读了这篇文章的解释

排队。浏览器在下列情况下对请求进行排队:

  • 有更高优先级的请求
  • 已经有六个TCP 此原点的连接已打开,这是限制。适用于 仅限HTTP/1.0和HTTP/1.1
停滞不前。请求可能由于排队中描述的任何原因而暂停

问题是因为这个还是其他原因

编辑:

我在3个浏览器中测试代码


我在Microsoft Edge中未看到任何已取消的请求。Chrome比Firefox有更多的功能

所有浏览器都对同一来源的并发调用施加限制,对此已有很好的讨论:

问题是,您以错误的方式实现了自动刷新, 您正在使用的是被调用:
轮询
,您基本上会定期调用服务器,但有时可能已经有其他调用正在进行,这将导致取消

轮询是一种非常古老的方法,您应该查看
WebSocket
s或
Server-Side-Events
,这无疑是处理服务器端更改并将其反映到UI中的最佳方法

如果您不能实现它们,那么您可能需要
长轮询策略
,这是一种古老但仍然有价值的方法

以下是其他信息:

功能自动刷新(onSuccess、onError、onEnd、rate、times){
onSuccess=onSuccess | |$.noop;
onError=onError | |$.noop;
onEnd=onEnd | |$.noop;
比率=数量(比率)| | 9000;
次数=次数| |无穷大
函数迭代(){
返回$
.post('lib/nav.php','c=autchk')
.然后(成功)
.失败(onError)
.always(函数(){
if(Number.isFinite(times)){
次数-=1;

如果(浏览器中ajax请求的次数您有限制,这取决于浏览器,例如,对于chrome浏览器,一段时间内大约有8个ajax请求。请以编写方式使用ajax请求。@Farhad然后如何修复我的代码,以便chrome不取消我的请求?为什么尝试使用超时!!。请详细解释ajaxI删除了超时,有时会在9秒内失败。我之所以使用超时,是因为我担心会有多个ajax请求会减慢连接速度。如果我在这方面出错,我很抱歉。我试图做的是检查数据库中的新输入,然后对此做一些通知。我在这方面做错了吗代码是什么?我会在我的下一个项目中实现你的建议,但现在也许我会坚持这种技术。谢谢…然后你会以一些取消而告终,但是,另一件需要记住的事情是,有时服务器没有什么要说的,但是客户端会继续调用,这将消耗不必要的资源(带宽、计算时间、ecc。)并将严重影响您的性能。您还可以考虑我上次编辑的代码(我添加了一个片段)来调整您的代码。非常感谢。我删除了无限内容以使代码正常工作。这是一个输入错误,应该是
Infinity
(始终执行请求)