可以在jquery ajax中设置什么是最大超时?

Jia*_*ian 6 javascript ajax jquery timeout http-status-code-404

$.ajax(
   url:"",
   async: true,
   timeout: 2*60*60*1000, //2 hours,
   success: function(){},
   error:  function(){}
);
Run Code Online (Sandbox Code Playgroud)

在jQuery ajax请求中,如果我将超时设置为大值,或者将其保留为空,是否会一直等到服务器返回结果?

实际上,我希望服务器会在1.5小时内响应,所以在我的js脚本中我将超时设置为2小时,但我发现Ajax在不到1小时内跳转到错误函数(使用msg代码404).这意味着ajax会提前中止等待.

所以我想知道是否可以设置ajax的最大超时值?

Mat*_*ius 6

我之前的答案是错误的(超时似乎太短了,我自己都不敢相信)所以我昨天做了一个测试,创建了 1GB zip,然后限制了我与 fiddler 的连接并编写了这个 aspx 页面。

public partial class Ajaxtest : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.Clear();
            Response.BufferOutput = false; 
            Response.WriteFile("c://OnTheMoveOffline.zip");
        }
    }
Run Code Online (Sandbox Code Playgroud)

然后我运行了这个脚本(有趣的是,fiddler 在 10 秒内因 OutOfMemory 异常而爆炸,但响应被保留)。

var f = function(){ 
var compareDate = new Date();
$.ajax({
 url : 'http://localhost:22037/FeatureDev/Ajaxtest.aspx',
success: function(data){ console.log(Math.abs(new Date() - compareDate));},
error : function(e){ console.log(Math.abs(new Date() - compareDate));},
timeout : 10000000
}).done(function() {
    console.log(Math.abs(new Date() - compareDate));
  })
  .fail(function() {
    console.log(Math.abs(new Date() - compareDate));
  })
  .always(function() {
    console.log(Math.abs(new Date() - compareDate));
  });}
Run Code Online (Sandbox Code Playgroud)

它回来了

9393076 
9393081 
9393081 
Run Code Online (Sandbox Code Playgroud)

9393076/1000 ~ 9393(s) = 02:36:33

相当于约 156 分钟。

我将在这个周末重复这个测试,看看它是否会在相同的时间后超时,但到目前为止,它似乎超过了 7200000 (2*60*60*1000)。