2014-01-09 31 views
1

我想知道是这些是任何方式来访问一个jquery ajax调用的结果以传统的var设置为功能时尚的形式。例如考虑:访问JQuery字符串以外的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()函数内,我将有权访问我的所有数据。我只是好奇,如果我试图做的甚至是可行的。

谢谢。

+0

[如何从AJAX调用返回响应?](http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call) – adeneo

回答

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); 
}); 
0

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

1

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

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

了Ajax的异步特性可以使事情更难,如果您使用命令式编程,但它会让你的用户界面更为敏感。

+0

这很好。这被认为是一个承诺? – Jim22150