javascript
JavaScript 回调函数中的 return false 问题
今天一個(gè)同事問了我一個(gè)問題,就是在 Ajax 方法中,請(qǐng)求成功后(success)的回調(diào)函數(shù)中根據(jù)響應(yīng)的值來判斷程序是否繼續(xù)執(zhí)行,他不解的是在回調(diào)函數(shù)中已經(jīng) return false 了,但是 Ajax 方法外部的后續(xù)語句卻仍然繼續(xù)執(zhí)行。他的代碼類似于:
$(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 的時(shí)候,希望程序終止執(zhí)行。但是程序卻仍然向下執(zhí)行,打印出了 "continue"。
這里他把 Ajax 方法設(shè)為同步請(qǐng)求(async:false)是對(duì)的,但是他沒有理解在 return false 時(shí)發(fā)生了什么。當(dāng)調(diào)用 return false 時(shí),實(shí)際上有三個(gè)處理過程:
1.event.preventDefault(); —— 阻止瀏覽器默認(rèn)的行為
2.event.stopPropagation(); ?——?停止事件冒泡
3.停止回調(diào)函數(shù)執(zhí)行并立即返回
在以上代碼的回調(diào)函數(shù)部分中執(zhí)行了 return false,就表示停止回調(diào)函數(shù)執(zhí)行并立即返回,不再履行函數(shù)內(nèi)的代碼,但函數(shù)外的代碼仍然會(huì)執(zhí)行。因此,程序在 Ajax 方法外的后續(xù)語句中繼續(xù)執(zhí)行。
?
如果要達(dá)到返回值不是 200 的情況下,終止程序執(zhí)行,可以在全局范圍內(nèi)聲明一個(gè)變量,并且在 Ajax 方法中給該變量重新賦值,然后在 Ajax方法外的后續(xù)語句中判斷該全局變量的值,代碼如下:
$(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 設(shè)為 false,即同步請(qǐng)求,此時(shí) Ajax 方法的行為就像一個(gè)普通函數(shù),瀏覽器會(huì)一直等待請(qǐng)求完成,然后才會(huì)執(zhí)行腳本的后續(xù)語句。
?
參考:http://www.jb51.net/article/42711.htm
轉(zhuǎn)載于:https://www.cnblogs.com/dee0912/p/4960651.html
總結(jié)
以上是生活随笔為你收集整理的JavaScript 回调函数中的 return false 问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android应用退出后广播无效,关闭应
- 下一篇: visualstudio调试html,V