ajax return 注意事项
实际开发过程中,需要通过ajax获得后台数据,如果数据不满足业务要求,则中止执行后面代码。有时ajax回调函数明明执行了return语句,但系统仍然执行后面代码,这是什么原因呢?
为了探究问题原因,下面将几种常见写法逐一进行测试验证。
写法1
function test1() {
var msg="test1";
$.ajax({
type:"POST",
async:false,
timeout:5000,
dataType:"json",
url:"?act=ok",
success: function(d){
return "ajax成功";
},
error:function(e){
return "ajax异常";
}
});
return msg;
}
执行方法test1(),返回值为【test1】
写法2
function test2() {
var msg="test2";
$.ajax({
type:"POST",
async:false,
timeout:5000,
dataType:"json",
url:"?act=ok",
success: function(d){
msg="ajax成功";
return msg+'2';
},
error:function(e){
msg="ajax异常";
return msg+'2';
}
});
return msg;
}
执行方法test2(),返回值为【ajax异常】
写法3
function test3() {
var msg="test3";
$.ajax({
type:"POST",
async:false,
timeout:5000,
dataType:"json",
url:"?act=ok",
success: function(d){
msg="ajax成功";
},
error:function(e){
msg="ajax异常";
}
});
return msg;
}
执行方法test3(),返回值为【ajax异常】
写法4
function test4() {
var msg="test4";
$.ajax({
type:"POST",
async:false,
timeout:5000,
dataType:"json",
url:"?act=ok",
success: function(d){
msg="ajax成功";
return "ajax成功2";
},
error:function(e){
msg="ajax异常";
return "ajax异常2";
}
});
return msg;
}
执行方法test4(),返回值为【ajax异常】
写法5
function test5() {
var msg="test5";
var msg2="test5-2";
$.ajax({
type:"POST",
async:false,
timeout:5000,
dataType:"json",
url:"?act=ok",
success: function(d){
msg="ajax成功";
return "ajax成功2";
},
error:function(e){
msg="ajax异常";
return "ajax异常2";
}
});
return msg2;
}
执行方法test5(),返回值为【test5-2】
写法6
function test6() {
var msg="test6";
$.ajax({
type:"POST",
async:false,
timeout:5000,
dataType:"json",
url:"?act=ok",
success: function(d){
msg="ajax成功";
return "ajax成功2";
},
error:function(e){
msg="ajax异常";
return "ajax异常2";
}
});
return "test6-2";
}
执行方法test6(),返回值为【test6-2】
结论
外层函数如果要获得 ajax 回调函数返回值,须满足以下条件
- ajax设置为同步方式
- 回调函数返回值必须赋值给外层函数变量,不能在回调函数内部通过字面量return