$.ajax(
url:"",
async: true,
timeout: 2*60*60*1000, //2 hours,
success: function(){},
error: function(){}
);
在jQuery ajax请求中,如果我将超时设置为大值,或者将其保留为空,是否会一直等到服务器返回结果?
实际上,我希望服务器会在1.5小时内响应,所以在我的js脚本中我将超时设置为2小时,但我发现Ajax在不到1小时内跳转到错误功能(使用msg代码404)。这意味着ajax会提前中止等待。
所以我想知道是否可以设置ajax的最大超时值?
答案 0 :(得分:4)
我之前的回答是错误的(超时似乎是短暂的,我自己也不敢相信) 所以昨天我做了一个测试,创建了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)。
答案 1 :(得分:0)
timeout
的默认全局值为0表示它是无限的。