在我们写项目的过程中,难免会用到Ajax的异步提交。那么有时候的需求可能是这样的。
我们想把回调函数的data中的值赋值给外部定义的变量,但往往可能发现根本就没有赋值。
//创建一个flag变量
var flag="";
$.ajax(
url:"请求的url地址",
dataType:"返回的数据格式",
data:{参数},
success:function(data){
flag=data;
}
console.log("flag":+flag);
)
//结果显示
flag:
从结果我们可以看出,flag是一个空值,其实就是没有赋值给flag;
这是什么原因造成的呢?其实Ajax有一个参数是async(是否异步),默认是true,就是要异步,那么js本身就是自上而下阻塞式的语言,一旦异步后,可以这么去理解。Ajax跟success里面那个function说 :“嘿哥们,你就等着返回的结果吧,我得先把下面的代码运行掉。”而如果把async设置成false,那么这时候是同步,也就是说Ajax跟success里面的那个function说:“嘿哥们,你等到返回的结果了吗?我得等你搞完我才能继续往下走啊。”这时候data就会把值赋值给flag,代码继续往下。
//创建一个flag变量
var flag="";
$.ajax(
url:"请求的url地址",
dataType:"返回的数据格式",
async:false,
data:{参数},
success:function(data){
flag=data;
}
console.log("flag":+flag);
)
//返回结果
flag:有值
但是有时候不可能说要一直改成false,同步本身对于Ajax来说就是失去了意义的,那如果把data内的值传递出去方便我们做一些业务操作呢?
我们可以在回调方法里写一个业务方法。如下:
//创建一个flag变量
var flag="";
$.ajax(
url:"请求的url地址",
dataType:"返回的数据格式",
async:true,
data:{参数},
success:function(data){
myservice(data)
}
)
function myservice(data){
//业务代码块
}
特别注意的是:$.post和$.get方法就是异步,想同步的话用$.ajax。