从ajax返回值并将该值设置为变量

时间:2017-06-15 07:23:51

标签: javascript php jquery json ajax

我在一个函数内部有一个ajax调用,它在成功函数上返回一个json对象,我需要将返回的数据设置为变量,搜索答案但我找不到任何有用的答案。

方法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:
我已尝试从成功调用函数并从该函数返回值,如此

 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();
 }

在这种情况下,函数返回值但只返回主数组(heros)中的另一个数组,而不是外部变量,如何修复它?

我尝试了上面的方法,我已经看到类似下面的东西(不知道我在哪里看到这个)将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,但是这个方法对我不起作用,如果它不适合我,那么它是如何复制的?

2 个答案:

答案 0 :(得分: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
    });

答案 1 :(得分: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;
     }
   });