ajax的async默认的设置值为true,这种情况为异步方式,就是说当ajax发送请求后,在等待server端返回的这个过程中,前台会继续 执行ajax块后面的脚本,直到server端返回正确的结果才会去执行success,也就是说这时候执行的是两个线程。
@H_502_4@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
@H_502_4@
对象,错误信息,(可能)捕获的错误对象。 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,
好了。。。( ⊙ _ ⊙ )