ajax中的timeout设置


jquery的$.ajax()中,有一个timeout的属性,用来设置超时时间,使用complete判断TextStatus的值是否为timeout,执行相应的操作。

代码如下:

$.ajax({
  url: 'ajax.php',
  type: 'post',
  data: postData,
  timeout: 8000,//设置超时时间为8s
  success: function(data){
    console.log(data)
  },
  complete:function(XHR,TextStatus){
    if(TextStatus=='timeout'){ //超时执行的程序
      console.log("请求超时!");
    }
  }
})

问题

ajax中async属性的默认值为true,即异步状态,$.ajax执行后,会继续执行ajax后面的脚本,直到服务器端返回数据后,触发$.ajax里的success方法,这时候执行的是两个线程。
若要将其设置为false,则所有的请求均为同步请求,在没有返回值之前,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。
这时,timeout属性失效,页面会在请求同步ajax的时候进入假死状态,直到请求有返回结果。

目前解决方案:避开同步ajax,使用异步代替。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM