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