【问题标题】:Accessing JSON string Outside of Jquery Ajax Call在 Jquery Ajax 调用之外访问 JSON 字符串
【发布时间】:2014-01-09 21:35:15
【问题描述】:

我想知道这些是以传统 var 设置为函数方式的形式访问 jquery ajax 调用结果的任何方式。例如考虑:

function getPoints(){
        //An array of JSON objects
        var Points;

        $.ajax({
          url: "js/retrievePointsDataJson.php",
          dataType:'json',
          type: 'POST',
        }).done(function(data){
            //console.log(data);
            Points.append(data);
        });

        console.log(Points);
        return Points;
    }

注释掉的 console.log 显示 json 对象的数组,而外部没有。现在,我尝试了这个:

var Points = $.ajax({ ...});

我在一个较大的对象中看到响应文本,但不确定如何访问 responseText。 console.log(Points.responseText) 产生一个未定义的变量。 这种方法有可能吗? Here 是另一个带有类似问题的复选标记。

我有另一种解决方案,将我的代码封装在 done() 函数中,我将可以访问我的所有数据。我只是好奇我正在尝试做的事情是否可行。

谢谢。

【问题讨论】:

标签: javascript jquery ajax json


【解决方案1】:

是的,但是,您必须等待请求完成才能这样做。但是,由于您不能有效地强制 return 等到数据存在,您唯一的选择是返回一个延迟对象,或者以允许它接受回调的方式重新编写函数.

function getPoints(){
    return $.ajax({
      url: "js/retrievePointsDataJson.php",
      dataType:'json',
      type: 'POST'
    });
}
getPoints().done(function(data){
    console.log(data);
});

function getPoints(callback){
    return $.ajax({
      url: "js/retrievePointsDataJson.php",
      dataType:'json',
      type: 'POST',
      success: callback
    });
}
getPoints(function(data){
    console.log(data);
});

【讨论】:

    【解决方案2】:

    因为 Ajax 调用是异步完成的,所以不应从外部函数返回它。这将要求您以某种方式阻塞,直到异步调用完成。相反,您可以将回调函数传递给 getPoints 函数,该函数将处理使用点的逻辑。

    function getPoints(callback){
        $.ajax({
            url: "js/retrievePointsDataJson.php",
            dataType:'json',
            type: 'POST',
        }).done(function(data){
            callback(data);
        });
    }
    

    如果您习惯于命令式编程,ajax 的异步特性会使事情变得更加困难,但它会让您的用户界面响应更快。

    【讨论】:

    • 这很好。这算是一个承诺吗?
    【解决方案3】:

    您在外部函数中调用的日志正在使用未定义的变量,因为该函数是异步的。您不能从 getPoints 返回它,因为它还没有完成。对 Points 变量的任何操作都需要在回调(传递给 done 的函数)内进行。

    【讨论】:

      猜你喜欢
      • 2013-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-30
      • 1970-01-01
      • 2011-08-01
      • 1970-01-01
      相关资源
      最近更新 更多