今天一个同事问了我一个问题,就是在 Ajax 方法中,请求成功后(success)的回调函数中根据响应的值来判断程序是否继续执行,他不解的是在回调函数中已经 return false 了,但是 Ajax 方法外部的后续语句却仍然继续执行。他的代码类似于:

    $(function(){
$.ajax({
async:false,
type:"post",
data:{
"username":"dee"
},
url:"ajax.php",
success:function(data){
if(data.code != 200){
return false;
}
}
});
console.log("continue");
});

即返回值不是 200 的时候,希望程序终止执行。但是程序却仍然向下执行,打印出了 "continue"。

这里他把 Ajax 方法设为同步请求(async:false)是对的,但是他没有理解在 return false 时发生了什么。当调用 return false 时,实际上有三个处理过程:

1.event.preventDefault(); —— 阻止浏览器默认的行为
2.event.stopPropagation();  —— 停止事件冒泡
3.停止回调函数执行并立即返回

在以上代码的回调函数部分中执行了 return false,就表示停止回调函数执行并立即返回,不再履行函数内的代码,但函数外的代码仍然会执行。因此,程序在 Ajax 方法外的后续语句中继续执行。

如果要达到返回值不是 200 的情况下,终止程序执行,可以在全局范围内声明一个变量,并且在 Ajax 方法中给该变量重新赋值,然后在 Ajax方法外的后续语句中判断该全局变量的值,代码如下:

    $(function(){
var flag = 1;
$.ajax({
async:false,
type:"post",
data:{
"username":"dee"
},
url:"ajax.php",
success:function(data){
if(data.code != 200){
flag = 0;
}
}
});
if(flag == 0){
return false;
}
console.log("continue");
});

注意:在这里需要把 Ajax 方法的 async 设为 false,即同步请求,此时 Ajax 方法的行为就像一个普通函数,浏览器会一直等待请求完成,然后才会执行脚本的后续语句。

参考:http://www.jb51.net/article/42711.htm

JavaScript 回调函数中的 return false 问题的更多相关文章

  1. Javascript回调函数中的this指向问题

    使用js中的定时器(setInterval,setTimeout),很容易会遇到this指向的问题. 直接上例子: 1 var name = 'my name is window'; 2 var ob ...

  2. javascript中的 return false和return true

    关于javascript中的 return false和return true,return 是javascript里函数返回值的关键字,一个函数内处理的结果可以使用return 返回,这样在调用函数 ...

  3. JavaScript回调函数及数组方法测试

    JavaScript回调函数及数组方法测试 具体代码如下: <!DOCTYPE html> <html lang="en"> <head> &l ...

  4. jQuey中的return false作用是什么?

    jQuey中的return false作用是什么?在众多的语句中都有return false的使用,当然对于熟悉它的开发者来说,当然是知根知底,知道此语句的作用,当然也就知道在什么时候使用此语句,不过 ...

  5. JavaScript 在函数中使用Ajax获取的值作为函数的返回值

    解决:JavaScript 在函数中使用Ajax获取的值作为函数的返回值,结果无法获取到返回值 原因:ajax默认使用异步方式,要将异步改为同步方式 案例:通过区域ID,获取该区域下所有的学校 var ...

  6. 【JavaScript】JavaScript回调函数

    什么是Javascript 回调函数? 函数和其他数据一样可以被赋值,删除,拷贝等,所以也可以把函数作为参数传入到另一个函数中. 这个函数就是所谓的回调函数   举例: //不带参数的case fun ...

  7. 理解javascript 回调函数

    ##回调函数定义 百度百科:回调函数 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数.回调函数不 ...

  8. a链接的onclick与js中的return false

    在学习<javascript基础教程>第八版时,有一个小细节开始不是很明白,查了一些资料后,理了一下思路. 例子的html代码: <!DOCTYPE html> <htm ...

  9. 理解 JavaScript 回调函数并使用

    JavaScript中,函数是一等(first-class)对象:也就是说,函数是 Object 类型并且可以像其他一等对象(String,Array,Number等)一样使用.它们可以"保 ...

随机推荐

  1. 《用delphi开发共享软件》-15.2桌面提示器

    打开一个配置文件: 打开一个配置文件 操作TStringGrid Procedure EmptyGrid(Var sg:TStringGrid); Var i:Integer; begin do sg ...

  2. js小例子(多字溢出,省略号表示)

    实现了div中字数较多,显示不下的时候,用省略号来表示,并且可以展开和收起: <html> <head> <meta http-equiv="Content-T ...

  3. 【bzoj4513】储能表【数位DP】

    本来是想去学数位DP,作死挑了这道题,爆炸... 听说正确姿势应该是去做bzoj4521[手机],听说迪克们当场都A了,Orz 然后对于4513,我只想说,一.脸.懵.逼 首先,我是无论如何都无法想到 ...

  4. S5中新增的Array方法详细说明

      ES5中新增的Array方法详细说明 by zhangxinxu from http://www.zhangxinxu.com 本文地址:http://www.zhangxinxu.com/wor ...

  5. Python基础5- 运算符

    Python的运算符和其他语言的类似,主要有:算术运算符.比较运算符.逻辑运算符.赋值运算符.成员运算符.位运算符 ----------------------------------------算术 ...

  6. DrawingContext.Pop Method

    The following example shows the effect of the Pop command. using System; using System.Windows; using ...

  7. linux安装SVN

    1. 下载软件包 http://archive.apache.org/dist/subversion/ http://archive.apache.org/dist/subversion/subver ...

  8. BZOJ 2733 & splay的合并

    题意: 带权联通块,添边与查询联通块中第k大. SOL: splay合并+并查集. 我以为splay可以用奇技淫巧来简单合并...调了一下午终于幡然醒悟...于是就只好一个一个慢慢插...什么启发式合 ...

  9. 51Nod 1001 数组中和等于K的数对 Label:Water

    给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K的数对.例如K = 8,数组A:{-1,6,5,3,4,2,9,0,8},所有和等于8的数对包括(-1,9),(0 ...

  10. 【BZOJ】1225: [HNOI2001] 求正整数

    http://www.lydsy.com/JudgeOnline/problem.php?id=1225 题意:给一个数n,求一个最小的有n个约数的正整数.(n<=50000) #include ...