长时间运行的AJAX请求会在几分钟后重新提交

Dre*_*ams 6 javascript ajax jquery

我有一个长期运行的服务调用,我使用jQuery.ajax调用.该服务可能需要2分钟才能完成.

提交了AJAX请求,预计不会响应.一个单独的AJAX请求报告操作的进度.

在某些网站上,我们发现代理在2分钟后重新提交Ajax请求本身.浏览器是Chrome浏览器,但我怀疑它与Chrome有关.

这肯定不是我们重新提交ajax请求的情况.为了确保我们设置bool以防止在beforeSend事件中重新提交任何内容.

我正在处理这种重新提交的方式是在数据请求和服务测试中添加一个nonce,如果在执行操作之前已经提交了nonce.对此服务的任何第二次调用都会无害地返回,并且原始请求将继续进行.

请注意,我添加了一个无意义的服务,除了等待5分钟之外什么也没做,而且我没有经历过测试服务的问题(在生产站点上).

任何人都可以给我任何线索,导致这个ajax重新提交的原因,以及如何在本地复制它?

这是用于发送请求的js:

var sent = false;
var data = { ... }; // data is a very large object;

$.ajax("service.ashx?loc=area/subarea/", {
    type: "POST",
    data: data,
    traditional: true,
    error: function (jqXHR, textStatus, errorThrown) {
        if (jqXHR.status === 0) {
            // see http://stackoverflow.com/questions/3825581/does-an-http-status-code-of-0-have-any-meaning

        } else {
            ReportFailure(textStatus,errorThrown);
        }
    },
    beforeSend: function () {
        if (sent === true) {
            return false;
        }
        sent = true;
        return true;
    }
});
Run Code Online (Sandbox Code Playgroud)

这是从HTTP存档(HAR)请求的ajax,其中请求被重新提交并且它立即失败.注意2分钟的时间.

{
"startedDateTime": "2015-12-11T12:26:58.018Z",
"time": 120066.61499999973,
"request": {
  "method": "POST",
  "url": "https://example.com/service.ashx?loc=area/subarea/",
  "httpVersion": "HTTP/1.1",
  "headers": [
    ... // removed for brevity
  ],
  "queryString": [
    { "name": "loc", "value": "area/subarea/" }
  ],
  "cookies": [
    ... // removed for brevity
  ],
  "headersSize": 1163,
  "bodySize": 48048,
  "postData": {
    "mimeType": "application/x-www-form-urlencoded; charset=UTF-8",
    "text": ..., // removed for brevity
    "params": [
      ... // removed for brevity        ] }
},
"response": {
  "status": 500,
  "statusText": "Internal Server Error",
  "httpVersion": "HTTP/1.1",
  "headers": [
    {
      "name": "Date",
      "value": "Fri, 11 Dec 2015 12:28:57 GMT"
    },
    ... // removed for brevity
  ],
  "cookies": [],
  "content": {
  "size": 54,
  "mimeType": "text/xml",
  "compression": 0
  },
  "redirectURL": "",
  "headersSize": 305,
  "bodySize": 54,
  "_transferSize": 359
},
"cache": {},
"timings": {
  "blocked": 120005.055999998,
  "dns": -1,
  "connect": -1,
  "send": 1.0939999989932403,
  "wait": 59.986000001008506,
  "receive": 0.47900000172376167,
  "ssl": -1
},
"connection": "7498"
Run Code Online (Sandbox Code Playgroud)

jon*_*nas 0

如果请求总是在 2 分钟内处理,则表明您的服务器端 (node.js) 未正确完成响应(带有rsp.end())。2 分钟是服务器上的默认超时express/node