【问题标题】:Does browser send ajax request again if no response for certain request?如果某些请求没有响应,浏览器是否会再次发送 ajax 请求?
【发布时间】:2014-12-09 11:00:38
【问题描述】:

我正在制作一个 Nodejs 应用程序,我正在使用 jQuery 向服务器端发送 ajax 请求。

奇怪的是,浏览器会多次发送ajax请求。

这是因为服务器端没有返回响应吗?

 $.ajax({
    type: "POST",
    url: "/triggerBatchJobs",
    data: JSON.stringify(buildInfo),
    contentType: 'application/json'
}).done(function(msg){
   console.log(msg);
});

我通过此代码 sn-p 发布 ajax 请求,我在 chrome 开发工具中监控网络选项卡,发现请求处于挂起状态,因为服务器端没有返回响应。

浏览器是否会尝试再次发送并获取这些待处理请求的响应?

顺便说一句,我在这个应用程序中使用了 socket.io。是socket.io的问题吗?

    script.
    var socket = io();
    socket.on('complete',function(msg){
        alert('Complete');
    })

在 node.js 中

io.sockets.emit('complete');

【问题讨论】:

  • 你有代码吗?
  • 你确定这是两次相同的请求,而不是两个不同的请求?想知道第二个请求是否是浏览器加载 favicon.ico 文件。
  • @loganfsmyth 实际上在 chrome 的网络选项卡中,我只能看到该请求处于待处理状态。但是在我的调试模式下的nodejs代码中,服务器端api将在几秒钟后再次被调用。我想知道浏览器是否会再次为那些待处理的请求发送请求

标签: node.js browser


【解决方案1】:

奇怪的是,浏览器会多次发送ajax请求。

不,事实上,如果发生错误,您应该使用something more complicated 再次发送请求。

我的建议是在应用程序$.ajax 中放置一个断点并检查停止的次数。您可以使用堆栈来了解调用的来源。

这是因为服务器端没有返回响应吗?

完全没有,如果请求过期,将调用错误回调。 (related, related) 所以,by default 没有建立超时。

试试

$.ajax( { ..., timeout:3000 ,... } );

浏览器是否会尝试再次发送并获取这些待处理请求的响应?

再次,不。

我在这个应用程序中使用 socket.io。是socket.io的问题吗?

我猜是无关的。

【讨论】:

    猜你喜欢
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 2021-09-05
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    相关资源
    最近更新 更多