AJAX回调函数无法正常工作

时间:2017-06-27 19:28:08

标签: javascript jquery ajax asynchronous

让我先说一下我对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调用的异步性质的方法。我的问题是为什么我的回调函数没有按预期工作。

2 个答案:

答案 0 :(得分:0)

我不确定为什么你需要将回调函数传递给你的ajax方法。让代码变得更加直观:

function callCallback(data){
  console.log(data.responseText);
};

这样就没有必要将它传递给第一个函数,你可以立即调用/存储数据,而不是把它交给一个看似冗余的函数。您正试图立即从函数本身调用responseText,由于异步回调尚未完成,因此无法正常工作。

[编辑] This response - 对于你的问题可能是重复的问题 - 是非常深入的,并且很好地总结了异步请求的发生情况,以及如何根据不同的ES标准处理它们。 / p>

答案 1 :(得分:-1)

尝试使用changin callCalback函数,如下所示;

cb.apply(this,data)