1. 程式人生 > >函式內部的 $.ajax() 獲取不到 ajax 的 return 返回值

函式內部的 $.ajax() 獲取不到 ajax 的 return 返回值

/*常見錯誤示例  直接在 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
})