Javascript AJAX长轮询未从浏览器发送

Javascript AJAX长轮询未从浏览器发送,javascript,ajax,browser,Javascript,Ajax,Browser,我已经设置了一个javascript web应用程序,使用ajax调用在.net服务器上使用长轮询: var _listenTimeout = 5 * 60 * 1000; //... $.ajax({ type: "GET", url: url, async: true, cache: false, dataType: "jsonp", timeout: _listenTimeout, success: cal

我已经设置了一个javascript web应用程序,使用ajax调用在.net服务器上使用长轮询:

var _listenTimeout = 5 * 60 * 1000;
//...
$.ajax({
      type: "GET",
      url: url,
      async: true,
      cache: false,
      dataType: "jsonp",
      timeout: _listenTimeout,
      success: callback
});
但是,当页面打开一段时间后,对服务器的请求停止响应时会出现问题。它似乎处于不稳定状态,数据包被卡在web浏览器之间,并从网络发送到服务器

我四处搜寻,我知道一些事情:

  • 请求被发送是因为它显示在ChromeWebDeveloperNetwork选项卡上(也是chrome://net-internals)还有萤火虫。请求的状态始终处于挂起状态,它只是在该状态下暂停
  • 请求url是正确的,因为通过
    curl
    发送相同的url会立即返回响应
  • 它没有离开我的网络,因为没有使用检测到任何数据包。服务器日志(以及那边的wireshark)也没有显示任何内容
奇怪的是,有时它会偶尔工作,但会有几分钟的延迟,即浏览器网络日志检测到请求得到响应(在我的例子中是204),wireshark检测到正在发送(和在服务器端接收)的请求。浏览器和wireshark ie的延迟是相同的,发出请求,出现延迟,然后chrome检测到响应,wireshare检测到发送的数据包

页面的干净刷新也解决了这个问题,同样的请求/响应几乎立即发生(使用相关的浏览器网络和wireshark日志)

我已经在Chrome21.0.1180.89和Firefox14.01上试过了


是否有某种浏览器队列被ajax请求阻塞在浏览器中?或者可能?现在还不知道…

$。ajax不会定期发出请求。超时选项指定发出不用于轮询的实际请求的延迟。请在这里阅读。这就是为什么您只看到一个ajax请求的原因。如果您想手动执行,必须使用setTimeout javascript方法


您可以在success和error回调中调用setTimeout,这样就可以摆脱并发的ajax请求。

有多长时间了
chrome://net-internals
是否存在?太棒了!你能详细说明一下吗?Chrome显示请求正在发出,但实际上没有得到响应。。。就像没有标题或其他什么?但这种联系是建立起来的吗?Wireshark根本没有显示任何数据包,或者只是没有显示您希望看到的数据包?你能嗅到错误的界面吗?@Brad-更新了问题的更多细节。希望它们能回答您所有的问题,即wireshark在干净的页面刷新中检测到相同的url请求。
是否有某种浏览器队列被ajax请求阻塞在浏览器中?或者可能并发请求太多?
是的,每个浏览器都有一个对其设计者来说“合乎逻辑”的限制。就这个问题试试我的测试仪。另外,我想知道,为什么要在浏览器端中止ajax??我认为最好是让服务器发出“无消息”(一段时间后),让浏览器再次发出请求(使用新的ajax),这样双方都可以正常地结束请求,而且更干净。我们正在使用长轮询(),因此应该可以工作<代码>设置超时不起作用,因为服务器将使用长轮询向浏览器推送更新。