javascript
JavaScript 回调函数中的 return false 问题
今天一個同事問了我一個問題,就是在 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
轉載于:https://www.cnblogs.com/dee0912/p/4960651.html
總結
以上是生活随笔為你收集整理的JavaScript 回调函数中的 return false 问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android应用退出后广播无效,关闭应
- 下一篇: 我的计算机加密,安装加密系统后,打开我的