本文主要是介绍关于JQuery中的ajax请求或者post请求的回调方法中的操作执行或者变量修改没反映的问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前段时间做一个项目,而项目中所有的请求都要用jquery 中的ajax请求或者post请求,但是开始处理一些简单操作还好,但是自己写了一些验证就出现问题了,比如表单提交的时候,要验证帐号的唯一性,所以要在submit前先请求一次,验证帐号是否已被使用,
中间有一段js如下:
var state = false;
$.post(url,{username:username},function(data){
if(!data){
$('#username').removeClass().addClass('notpass');
$('#usernameSpan').html("<font color='red'>*该帐号已被使用!</font>");
}else{
$('#username').removeClass().addClass('pass');
$('#usernameSpan').html("<font color='green'>√ 通过</font>");
state = true;
}
});
return state;
可是不管data为真还是为假,返回值均为false,让我相当郁闷,后来在网上查了下资料,原来这是ajax异步调用导致的。
以前一直不太懂ajax异步调用的原理,后来仔细看了下别人的讲解,才算明白。所谓ajax异步调用就是当用户提交ajax请求的时候,不会等待请求的返回结果,跳过ajax代码块,继续往下执行(post请求也是ajax请求的一种,是一种简化版)。针对这段代码,就是初始state为fasle,而发送一个post请求之后,因为不会等待返回结果,所以中间的if--else 判断还未执行,所以返回的state此时为false。
那怎么让它等待返回结果之后,在继续往下执行呢?有两种方法:
第一种:在一开始把ajax请求设置为同步的,因为ajax请求默认为异步的。即把async 属性设置为false;设置全局的代码如下:
$.ajaxSetup({
async : false
});
第二种是在请求中设置,即只设置某个方法为同步的,那么该方法就会等待返回结果,其它方法仍然为异步的。代码如下:
$.ajax({
type: "POST",
async : false,
url: url,
success: function(data){
alert( msg );
}
});
这篇关于关于JQuery中的ajax请求或者post请求的回调方法中的操作执行或者变量修改没反映的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!