2017-06-15 76 views
-1

我有一個函數內返回成功函數json對象的ajax調用,我需要設置返回的數據到一個變量,搜索答案,但我找不到任何有用的答案。從ajax返回值並將該值設置爲一個變量

方法1:
即時調用一個函數,這樣

var obj = ajaxCall(); 

我的代碼返回的值設置爲一個變量是像

function ajaxCall(){ 
    var result; 
    $.ajax({ 
     url: url_of_my_php_file, 
     dataType: 'json', 
     type: 'GET', 
     contentType: 'application/json', 
     success: function(data) { 
     // it returns json Object "data" 
     result = data; 
    } 
    }); 
    return result; 
} 

如果我登錄成功回調中的數據我的json與此類似

[{ collection: "Super Hero", img:"http://img_url.jpg", 
heros: [{ id: "111", text: "Iron Man" }, 
{ id: "123", text: "Superman" }, 
{ id: "124", text: "Batman" }] 
}] 

但它不是返回值,而是值返回空字符串,因爲該返回函數不會等待ajax成功函數。

方法2:
我已經從成功調用函數,並從該funcion返回值,這樣

function ajaxCall(){ 
    var result; 
    $.ajax({ 
     url: url_of_my_php_file, 
     dataType: 'json', 
     type: 'GET', 
     contentType: 'application/json', 
     success: function(data) { 
     // it returns json Object "data" 
     callBack(data); 
    } 
    }); 

    function callBack(data){ 
     return data; 
    } 
    return callBack(); 
} 
在這種情況下

的函數返回內部主的價值,但只有另一個數組試圖陣列(英雄)只,不是外部變量,如何解決?

我試圖上述方法中,和我看到類似下面(不知道其中i已經看到這一點)直接設置AJAX結果到可變

function ajaxCall(){ 
var result= $.ajax({ 
    url: url_of_my_php_file, 
    dataType: 'json', 
    type: 'GET', 
    contentType: 'application/json', 
    success: function(data) { 
    // it returns json Object "data" 
    result = data; 
    } 
    },(0); 
} 

是這種方法是有效的?
如果不是,那麼有沒有什麼辦法讓該字符串結果變量並將其返回給obj?

更新:

我已經試過this link,但該方法是不是爲我工作,如果它不工作對我來說它再怎麼是副本?

回答

4

使用回調

function ajaxCall(callback){ 
    $.ajax({ 
     url: url_of_my_php_file, 
     dataType: 'json', 
     type: 'GET', 
     contentType: 'application/json', 
     success: callback 
    }); 
} 

ajaxCall(result => { 
    //do something with result 
}) 

或承諾

function ajaxCall(callback){ 
    return new Promise((resolve, reject) => { 
     $.ajax({ 
      url: url_of_my_php_file, 
      dataType: 'json', 
      type: 'GET', 
      contentType: 'application/json', 
      success: resolve, 
      error: reject 
     }); 
    }); 
} 

ajaxCall() 
    .then(result => { 
     //do something with result 
    }) 
    .catch(err => { 
     //or err 
    }); 
+3

迄今爲止唯一正確的在這個問題上,祝賀之一!僅供參考,你可以做'成功:回調'不需要創建一個匿名函數來調用一個名爲:) – George

0

試試這個

var obj; 
    $.ajax({ 
     url: url_of_my_php_file, 
     dataType: 'json', 
     type: 'GET', 
     contentType: 'application/json', 
     success: function(data) { 
     // it returns json Object "data" 
     obj = data; 
    } 
    }); 
+1

它只分配它不返回 – karthick

+0

爲什麼你需要返回?問題是將值賦給obj – Gopinath

+1

這個問題,如何知道obj何時包含響應?一旦AJAX調用完成,'success'處理程序應該接受回調。 – maddockst

相關問題