今天在写Ajax的时候遇到一个问题,Ajax内部的 return false 不生效,并继续执行后边的代码。原代码大概如下:
$(function(){
//Ajax调用处理
$.ajax({
type: "POST",//规定传输方式
url: "categoryAction",/URL
data: {'cid':$('#cid').val()},//参数
success: function(data){
if('-1'==data){
return false; //此处return false不起作用
}
else{
return true;
}
}
});
alert(123); //ajax中的判断条件是否成立,都会执行这步
});
后面百度查找了一些资料,原因如下:
Ajax发起的是异步请求,而JS函数中其他代码执行的是同步请求,这就造成了不管Ajax中的请求是否结束,都不会影响js函数中其他代码的执行,所以return false并不是没有执行,而是只在Ajax内部起作用,在Ajax请求之外就不起作用了,继续执行其他代码。
所以解决方案如下:
1.将Ajax请求方式设置为同步(Ajax默认async:true)在js执行到Ajax代码时,会停止所有页面加载,页面呈现假死状态,当Ajax中的代码执行完毕后,才会继续执行其他代码。
2.使用全局变量返回结果。
$(function(){
//Ajax调用处理
var result =false;
$.ajax({
async:false,//同步加载
type: "POST",//规定传输方式
url: "categoryAction",/URL
data: {'cid':$('#cid').val()},//参数
success: function(data){
if('-1'==data){
result=false;
}
else{
result=true;
}
}
});
return result; // 返回结果为true时,后面的代码才会执行。
alert(123);
});