jQuery Ajax中最长的超时时间是多少?

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

在jQuery的ajax请求中,如果我设置一个很大的超时时间或者将其留空,那么它会一直等待服务器返回结果吗?
实际上,我期望服务器会在1.5小时内响应,在我的js脚本中设置了2小时的超时时间,但我发现Ajax在不到1小时内就跳转到错误函数(带有404消息代码),这意味着Ajax提前终止了等待。
因此,我想知道Ajax能够设置的最大超时时间是多少?

4
为什么要发起一个需要1.5小时才能得到回复的Ajax请求? - adeneo
1.5小时是最糟糕的预期情况。大多数其他的ajax请求将在几秒钟内返回。 - Jianxun Lian
你必须考虑用户体验。 - Satpal
2
根据你的服务器端语言启动一个后台进程或线程,然后让你的JS询问“你还活着吗” - 一开始,可能是每15秒一次,然后每分钟一次,然后每5分钟一次,然后每15分钟一次... - Jeremy J Starcher
2个回答

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");
        }
    }

然后我运行了这个脚本(有趣的是,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));
  });}

它的翻译是:“它返回了”。
9393076 
9393081 
9393081 

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

这相当于大约156分钟。

我将在本周末重复此测试,以查看是否会在同样的时间后超时, 但目前看来它似乎超过了7200000(2 * 60 * 60 * 1000)。


4

timeout 的默认全局值为 0,意味着它是无限的。


11
这些反对者更关注英语语法还是解决方案本身?“Unfinitive”可能不是一个词,但人们可以很容易地理解他想说什么。是的, 默认超时时间被视为“0”(虽然从技术上讲不是)。 - Venky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接