【问题标题】:Get json value from a function that has an ajax call in it从具有 ajax 调用的函数中获取 json 值
【发布时间】:2011-09-26 01:49:42
【问题描述】:

我正在尝试从一个包含 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;

【问题讨论】:

    标签: javascript ajax json


    【解决方案1】:

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

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

    【讨论】:

    • 我想返回这些值,这样我就可以在不同的情况下使用它们,例如一次作为文本,另一次作为输入中的值等
    • 虽然我认为您可以通过使 ajax 调用同步来使其工作,但每次调用 getVariables() 时都会发出 http 请求。您可以将数据返回的数据推送到更易于访问的范围内,但如果没有更完整的目标概念,有人很难提供代码。
    • 我将把我的整个代码发布到网上,以便您更好地了解场景
    【解决方案2】:

    您的匿名成功函数返回 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}  
    }
    

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

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

    【讨论】:

    • 如果我添加: async : false 不会有帮助吗??
    • 如果你移动了return语句,它应该可以工作。请参阅上面的编辑。
    • 我得到未定义的变量。我想我需要发布整个代码,以便您更好地了解发生了什么。
    【解决方案3】:

    这样做有两个问题:

    默认情况下,Ajax 调用是异步的。这意味着直到getVariables 返回后的某个时间才会调用成功函数。您需要更改 ajax 调用的设置,以便它是同步的。

    您的第二个问题是这些值是从成功函数返回的,但不会从 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;
    }
    

    【讨论】:

    • @nouky - 这很可能是语法错误:函数拼写错误或括号不匹配。无法帮助您 - 尝试使用 F12 开发人员工具在 IE9 中运行它,看看它是否可以帮助您。
    • @nouky - 我意识到我给你的内容仍然存在错误。我又修改了一遍。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    • 2023-01-16
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多