Ajax post请求超时问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ajax post请求超时问题相关的知识,希望对你有一定的参考价值。

如下已经设置了超时时间,由于后台运算会花费较长时间(大概4、5分钟),这个时间一旦较长,再返回Json给页面时页面就没反应了

$.ajax(
type: "post",
url: "/report/handleCondition",
data: "periodBeginTime": "" + periodBeginTime + "", "periodEndTime": "" + periodEndTime + "", "providerStr": "" + providerStr + "", "orderTypeStr": "" + orderTypeStr + "", "verifyType": "" + verifyType + "" ,
dataType: "json",
timeout: 1200000, //20分钟的超时时间
success: function (jsonData)
if (jsonData.Statu == 'ok')
cover.style.display = 'none';
covershow.style.display = 'none';
$("#showDetail").css("display", "block");
$("#reportIframe").attr("src", "");
$("#reportIframe").css("display", "block");
$("#reportIframe").attr("src", "http://reports.oa.com/Reports/Pages/Report.aspx?ItemPath=%2fWerify%2fMainReport");
return;

else



,
error: function (request, status, err)
if (status == "timeout")

alert("请求超时")



);

我设了20分钟的超时时间,实际上大概4、5分钟之后后台就会返回Json,但返回后前台没有反应,等了20分钟,弹出超时。 如果后台在较短时间内返回Json,例如一两分钟,那么前台是有反应的。。。怎么解决这种超时问题啊

参考技术A 先声明,我不知道如何解决这个问题,但我想提一些建议。
需要4、5分钟的操作我不清楚具体是什么,如果是单纯的数据库操作之类的这个设计就有问题;如果是数据量十分大的操作那么应该考虑缓存、预处理等。
还有,你可以发送数据请求到后台,后台接收后便立即返回调用成功,然后把4,5分钟的操作放到另一个线程里去做,然后对每一次的请求后台都做一个静态的唯一标识,然后把标识返回前台,然后4,5分钟之后前台通过这个标识去后台找结果,或者不确定操作所需时间就缩短轮询的间隔,比如每30秒一请求,后台操作不完成便继续等待下一次请求。本回答被提问者和网友采纳
参考技术B async: true追问

没用

追答

这个是异步的,你那个同步的会卡死浏览器的

以上是关于Ajax post请求超时问题的主要内容,如果未能解决你的问题,请参考以下文章

jquery ajax超时设置

jquery ajax超时设置

jquery ajax超时设置

httpclient的post请求超时

增加 ExtJs 中的 Ajax 请求超时

超时 AJAX 请求 Cordova 5