从包含ajax调用的函数中获取json值

时间:2011-09-26 01:49:42

标签: javascript ajax json

我正在尝试从其中包含ajax调用的函数中获取json值。

这是我的功能:

function getVariables(){

     $.ajax({
      type: "post",
      url: "db/functions.php",
      data: "func=getvars,
      dataType: "json",
      success: function(response)
      {        
        return { 
          'var1': response.var1,
          'var2': response.var2
        };
      }
    });     
}

我试图在我的javascript中使用它来获取var1 var firstvar = getVariables()。var1;

当我在getVariables函数中设置警报时,它返回var1和var2,已经检查过了。所以唯一不能正常工作的部分是:var firstvar = getVariables()。var1;

3 个答案:

答案 0 :(得分:0)

这有两个问题:

默认情况下,Ajax调用是异步的。这意味着只有在getVariables返回后的某个时间才会调用success函数。您需要更改ajax调用的设置,以使其同步。

您的第二个问题是值是从success函数返回的,但是它不会从getVariables函数返回它们。您需要从函数范围返回变量。

下面是相同的函数,但async选项设置为false,并且函数范围返回值。

function getVariables(){
     var rv = undefined;
     $.ajax({
      async : false,
      type: "post",
      url: "db/functions.php",
      data: "func=getvars",
      dataType: "json",
      success: function(response)
      {        
        rv = { 
          'var1': response.var1,
          'var2': response.var2
        };
      }
    });     
    return rv;
}

答案 1 :(得分:0)

您的匿名成功函数返回var1var2(无处),但getVariables未返回它们。它实际上不能,因为它在异步JSON调用完成之前已经退出。即使它是同步的,你仍然没有返回匿名“子功能”的返回值。

编辑:您可以这样做:

function getVariables(){

    var response = $.ajax({
      type: "post",
      url: "db/functions.php",
      data: "func=getvars,
      dataType: "json",
      async: false
    });
    return {'var1': response.var1,
            'var2': response.var2}  
}

查看返回语句现在如何在getVariables中,而不是在INSIDE getVariables函数中?所以现在getVariables将返回值。

虽然小心使用async:false,但它可以锁定浏览器。

答案 2 :(得分:0)

那不行。 AJAX调用是异步的,需要等待http请求完成才能使用它的返回值。

您可以使AJAX调用同步,但这可能会引入不必要的延迟。通常,更好的选择是直接在回调“成功”函数中使用变量。