ajax的async默认的设置值为true,这种情况为异步方式,就是说当ajax发送请求后,在等待server端返回的这个过程中,前台会继续 执行ajax块后面的脚本,直到server端返回正确的结果才会去执行success,也就是说这时候执行的是两个线程。
ajax用它就是因为它的异步性,平时也都是默认值,今天在项目中遇到这样一个问题,用ajax更新数据后,立马刷新页面:
$.ajax({
type:'POST',url:'changeVoteByid.action',data:{'whos[]':whos},dataType:'json',success:function(msg){
alert(msg);
},});
window.location.reload(true);
执行这段代码的话,数据库中数据确实更新了,但是window.location.reload(true);一执行即刷新页面,数据并没有变!!!
调试什么的试了好久,发现不是java代码的问题!~(~ ̄▽ ̄)~
此时想到ajax还有一个error参数用来处理错误:
(默认: 自动判断 (xml 或 html)) 请求失败时将调用此方法。这个方法有三个参数:XMLHttpRequest
对象,错误信息,(可能)捕获的错误对象。 function (XMLHttpRequest,textStatus,
errorThrown) { // 通常情况下textStatus和errorThown只有其中一个有值 this; // the
options for this ajax request }
于是ajax中加上这几句:
error: function(XMLHttpRequest,errorThrown) {
alert(XMLHttpRequest.status);
alert(XMLHttpRequest.readyState);
alert(textStatus);
}
此时再执行XMLHttpRequest.status一直等0,在网上搜了搜:
[AJAX问题之XMLHttpRequest status = 0]这篇文章介绍的不错!(http://www.jb51.cc/article/p-qxfhlfkw-sc.html)
但是发现我的错也不是因为这里的原因, ̄△ ̄
但能锁定就是ajax这里的问题了,
后来在chrome调试时,为了调试方便就把
window.location.reload(true);
给注释掉了,卧槽,注释掉后一切正常!!!突然间恍然大悟!!!tm异步问题有没有,这里应该是同步的!!!
要等ajax执行完,再去刷新!
加上:
async: false,
好了。。。( ⊙ _ ⊙ )