在 jquery ajax 中可以设置的最大超时时间是多少?

Posted

技术标签:

【中文标题】在 jquery ajax 中可以设置的最大超时时间是多少?【英文标题】:what is the maximum timeout can be set in jquery ajax? 【发布时间】:2014-06-23 23:10:30 【问题描述】:
$.ajax(
   url:"",
   async: true,
   timeout: 2*60*60*1000, //2 hours,
   success: function(),
   error:  function()
);

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

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

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

【问题讨论】:

你为什么要做一个 1.5 小时内得到答复的 ajax 请求? 1.5h 是最坏的预期情况。大多数其他 ajax 将在几秒钟内返回。 你必须考虑用户体验。 取决于你的服务器端语言——启动一个后台进程或线程,然后让你的 JS 询问“你倒下了”——起初,可能每 15 秒,然后每分钟,然后每五个,然后每 15 个... 【参考方案1】:

我之前的回答是错误的(超时似乎很短,我自己都不敢相信) 所以我昨天做了一个测试,创建了 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");
        
    

然后我运行了这个脚本(有趣的是,提琴手在 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)。

【讨论】:

【参考方案2】:

timeout 的默认全局值为 0,表示它是无限的。

【讨论】:

这些downVoters 是否更关注英语语法而不是解决方案?不定式可能不是一个词,但人们可以很容易地理解他试图讲述的内容。是的,默认超时被视为“0”(从技术上讲不是)

以上是关于在 jquery ajax 中可以设置的最大超时时间是多少?的主要内容,如果未能解决你的问题,请参考以下文章

Asp.Net MVC 2中会话超时时的确认

Xcode 服务器 - 尝试设置 AX 消息传递超时时超时

Vuetify 小吃吧超时时更新父状态

当我在 gunicorn 中为 Django 应用程序设置工作人员超时时,其他用户无法访问该应用程序

gwt中会话超时时触发方法调用

AWS Lambda超时时获取通知