如何使用ajax成功返回变量?

时间:2012-09-22 18:06:06

标签: jquery ajax function

我有两个带ajax调用的函数。我如何使用function1中返回的function2中的变量。

function func1 (){
  $.ajax({
      url:"",
      dataType: 'json',
      success: function(data){
          var foo
      }
  });  
  //How can i use var foo in func2(foo)?
  //i try .done(func2(foo)); but it returns foo is not define
}

    function func2 (param){
       $.ajax({
         url:"",
         dataType: 'json',
         success: function(data){
       }
     });
     }

4 个答案:

答案 0 :(得分:4)

    function func1 (){
      var foo;
      $.ajax({
          url:"",
          dataType: 'json',
          async: false,
          success: function(data){
              foo = ...
          }
      });  
      func2(foo)
    }

您应该将 async 设置为false,或者您可以在成功处理程序中执行func2。

答案 1 :(得分:1)

您必须全局设置变量foo,并将async设置为false,以便浏览器在执行func2之前等待执行func1:

var foo;
function func1 (){
  $.ajax({
      url:"",
      dataType: 'json',
      async: false,
      success: function(data){
          foo = ...
      }
  });  
  //How can i use var foo in func2(foo)?
  //i try .done(func2(foo)); but it returns foo is not define
}

function func2 (param){
   $.ajax({
     url:"",
     dataType: 'json',
     success: function(data){
         alert(foo)
   }
 });
 }

你也可以在没有初始化var的情况下完成它,正如Ozerich所说的那样;但是将所有变量初始化是一种很好的做法。

请记住,如果再次初始化成功回调中的变量(再次使用var foo),您将引用一个名为foo的新变量而不是全局变量。

您可以详细了解搜索网络的JavaScript变量范围。https://stackoverflow.com/a/500459/407456

不过,你应该考虑在func1的success回调中执行你的func2。

答案 2 :(得分:0)

只需使用func2() AJAX func1()函数调用success

function func1() {
    $.ajax({
        url: "",
        dataType: 'json',
        success: function(data) {
            var foo = data;
            func2(foo);
        }
    });
}

function func2(param) {
    $.ajax({
        url: "",
        dataType: 'json',
        success: function(data) {}
    });
}​

您可以使用如下所示的回调函数:

function func1(callback) {
    $.ajax({
        url: "",
        dataType: 'json',
        success: function(data) {
            var foo = data;

            // pass foo variable
            // as callback parameter
            callback(foo);
        }
    });
}

function func2(param) {

    // here call func1() with a
    // callback function argument

    func1(function(foo) {
      $.ajax({
        url: "",
        dataType: 'json',
        success: function(data) {}
      });
   });
}​

根据 jQuery doc about async of $.ajax()

  

从jQuery 1.8开始, async:false 与jqXHR($ .Deferred)的使用是   弃用;您必须使用完整/成功/错误回调。

答案 3 :(得分:0)

我不确定你想要完成的是什么。

如果你想在第一个之前等待第二个ajax调用,你应该在ajax选项中使用async: false,或者使用回调:

function func1 (callback){
  $.ajax({
      url:"",
      dataType: 'json',
      success: function(data){
          var foo;
          if (typeof callback != 'undefined')
              callback(foo);
      }
  });  
}


function func2 (param){
   $.ajax({
     url:"",
     dataType: 'json',
     success: function(data){
   });
 }

func1(func2);

如果你想同时拥有两个ajax调用,但是第二个函数应该在某些代码块之前等待第一个函数的结果,你需要在两个函数中定义回调到第三个函数来检查是否所有数据已下载,然后才执行代码。