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

rak*_*ode 2 javascript php ajax jquery json

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

方法 1:
即时调用函数并将返回值设置为这样的变量

var obj = ajaxCall();
Run Code Online (Sandbox Code Playgroud)

我的代码就像

 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;
 }
Run Code Online (Sandbox Code Playgroud)

如果我在成功回调中记录数据,我的 json 与此类似

[{ collection: "Super Hero", img:"http://img_url.jpg",
heros: [{ id: "111", text: "Iron Man" },
{ id: "123", text: "Superman" },
{ id: "124", text: "Batman" }]
}]
Run Code Online (Sandbox Code Playgroud)

但它不返回值,而不是返回空字符串的值,因为该返回函数不等待 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();
 }
Run Code Online (Sandbox Code Playgroud)

在这种情况下,函数返回值,但只有主数组(英雄)内的另一个数组,而不是外部变量,如何解决?

我尝试了上面的方法,我看到了类似下面的东西(不知道我在哪里看到过这个)将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);
}
Run Code Online (Sandbox Code Playgroud)

这个方法有效吗?
如果没有,那么有什么方法可以将该字符串转换为结果变量并将其返回给 obj?

更新:

我已经尝试过此链接,但该方法对我不起作用,如果它对我不起作用,那么它是如何复制的?

Kir*_*ill 10

使用回调

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
})
Run Code Online (Sandbox Code Playgroud)

或承诺

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
    });
Run Code Online (Sandbox Code Playgroud)

  • 到目前为止,这个问题唯一正确的,恭喜!仅供参考,您只需执行`success: callback` 无需创建匿名函数来调用命名函数:) (3认同)