让我先说一下我对AJAX / JS一般都是新手。我有来自AJAX调用的未定义返回值的问题。我已经尝试过关于堆栈溢出的一些在线教程或其他答案,但整个回调函数这对我不起作用。我想要的只是返回的数据,所以我可以在我的代码中的其他地方使用它(特别是绘制一些图表)。将绘图代码放在成功块中似乎很俗气,所以我想避免这样做。
我真的很感激任何帮助。我的代码如下:
function updateMe(callback) {
var count1;
var PointsArray = chart.getSelectedPoints();
var xArray = [];
var yArray = [];
var contributions = [];
var finished = 0;
for(count1 = 0; count1 < PointsArray.length; count1++){
yArray[count1] = PointsArray[count1].id;
};
$.ajax({
type: 'POST',
url: "...",
dataType: "json",
data: {
csrfmiddlewaretoken: '{{csrf_token}}',
'data[]': (yArray),
},
success: function(data){
callCallback(data, callback);
}
});
};
function myCallback(result) {
return result;
}
function callCallback(data, cb){
cb(data);
};
var toParse;
toParse = updateMe(myCallback);
编辑:
如果我这样做,我应该补充一下
x = updateMe(myCallback)
在控制台中,我得到了理想的结果。然后我可以使用x.responseText来提取单个数据。但是,如果我这样做
x = updateMe(myCallback).responseText
我未定义
编辑#2为什么这不是重复的
标记的问题讨论了如何使用回调作为处理AJAX调用的异步性质的方法。我的问题是为什么我的回调函数没有按预期工作。
答案 0 :(得分:0)
我不确定为什么你需要将回调函数传递给你的ajax方法。让代码变得更加直观:
function callCallback(data){
console.log(data.responseText);
};
这样就没有必要将它传递给第一个函数,你可以立即调用/存储数据,而不是把它交给一个看似冗余的函数。您正试图立即从函数本身调用responseText,由于异步回调尚未完成,因此无法正常工作。
[编辑] This response - 对于你的问题可能是重复的问题 - 是非常深入的,并且很好地总结了异步请求的发生情况,以及如何根据不同的ES标准处理它们。 / p>
答案 1 :(得分:-1)
尝试使用changin callCalback函数,如下所示;
cb.apply(this,data)