ajax异步问题导致的刷新页面数据不更新

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, textStatus, errorThrown) {
                        alert(XMLHttpRequest.status);
                        alert(XMLHttpRequest.readyState);
                        alert(textStatus);
                    }

此时再执行XMLHttpRequest.status一直等0,在网上搜了搜:
[AJAX问题之XMLHttpRequest status = 0]这篇文章介绍的不错!(http://blog.csdn.net/iaiti/article/details/42192659)

但是发现我的错也不是因为这里的原因, ̄△ ̄
但能锁定就是ajax这里的问题了,

后来在chrome调试时,为了调试方便就把

window.location.reload(true);

给注释掉了,卧槽,注释掉后一切正常!!!突然间恍然大悟!!!tm异步问题有没有,这里应该是同步的!!!
要等ajax执行完,再去刷新!
加上:

async: false,

好了。。。( ⊙ _ ⊙ )

jquery的ajax同步和异步区别

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值