函式內部的 $.ajax() 獲取不到 ajax 的 return 返回值
阿新 • • 發佈:2019-02-16
/*常見錯誤示例 直接在 ajax 裡面return 結果
*/
function demo(){
$.ajax({
url : 'test.do',
type : "post",
data : {},
async : false,
success : function(data) {
return 2;
}
});
}
/* 結果 無返回 */
兩個錯誤寫法會導致這種情況:
1.ajax預設為非同步,非同步不可以直接return返回結果
2.在ajax方法中直接return返回值,巢狀函式中,return該作用域函式的返回值,demo中,demo()為外部函式,return的結果對demo()無效
修改為:
/** * (1)同步呼叫 (2)且在ajax對全域性變數進行設值 (3)ajax函式外將變數return * 結果:返回 2。成功獲取返回值 * 成功原因:先執行result = 2;再往下執行return result; */ function demo1(){ var result = 1; $.ajax({ url : 'test.do', type : "post", data : {}, async : false, success : function(data) { result = 2; } }); return result; //2 }
可以正常運行了。但是,ajax 改為同步請求會導致阻塞;
ajax 需要 進行非同步請求,可以用回撥函式 來解決:
/** * 新增async:true.即修改為非同步 * 結果以callback的形式回撥 */ function demo1(params,callback){ var result = 1; $.ajax({ url : 'test.do', type : "post", data : {"params ":params }, async : true, success : function(data) { result = 2; callback(result); } }); } demo1("Value",function(rs){ //do someting })