在Jquery Ajax调用之外访问JSON字符串

时间:2014-01-09 21:35:16

标签: javascript jquery ajax json

我想知道这些是以传统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()函数中封装我的代码,我将可以访问我的所有数据。我只是好奇,如果我想做的事情是可行的。

谢谢。

3 个答案:

答案 0 :(得分: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);
});

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

您在外部函数中调用的日志正在使用未定义的变量,因为该函数是异步的。你不能从getPoints返回它,因为它不会完成。任何使用Points变量的工作都需要在回调中发生(传递给done的函数)。