最近做到一个功能,从别的连接跳转登录到我们系统后台,登录后会查询一些数据。一开始登录用的异步调用,领导看日志发现还没登录就调了好几个查询接口,要改。我想简单点就改成同步不就行了,然后上同步,恩,好多了,登录不成功就不会调查接口了。接下来问题又来了,怎么每次登录失败都要这么久才能看到结果,4.2min才看到登录失败结果,不能忍。回去看代码,timeout也加了啊,10000,也才10s,怎么就会4.2min呢,赶紧大百度,还真有人说这个问题,Stack Overflow有人问到这个问题,ajax同步请求会阻塞浏览器线程,浏览器本身xhr对象是没有timeout的,jquery自己在xhr对象的基础上封装了timeout,所以能用,但也仅限在异步情况下。同步的时候就不行了,浏览器线程被阻塞,setTimeout不能用了。
最后两种解决办法:
一:服务器设置超时时间,超时后给个错误码
二:浏览器端还是用异步请求(超时时间自己控制),自己控制异步流程,避免无效请求(调整代码逻辑)