AJAX回调不会像预期的那样返回数据....

时间:2014-12-11 11:45:38

标签: ajax callback

我使用这个example希望在AJAX调用后返回数据。基本上我执行AJAX调用一个回调函数来处理并返回所需的最终数据。但是,当我执行代码时,为获取数据而分配的变量是未定义的,并且回调函数在AFTER后正确执行....

这是执行AJAX调用的函数:

    function getgraphdata(callback){
    $.ajax({
        type: "GET",
        url: "DiCAST_hourly.csv",
        dataType: "text",
        async: false,
        success: callback,
        error: function(){alert("Error")}
        });
};

这是回调函数:

function processgraphData(allText) {
    var result = [];
    var allTextLines = allText.split(/\r\n|\n/);
    for (var i=1; i<allTextLines.length; i++) {
        if (allTextLines[i].split(",")[0] == 'LETO') {
            var line = allTextLines[i].split(",");
            for (var j = 1; j<line.length - 5; j += 5){
                result.push([line[j],line[j+1],line[j+2]]);
            };
            break;
            };
        };
    console.log("OK");
    console.log(result);
    return result;
    };

这些是我执行此代码的行:

      console.log("OKOK");
      var result = getgraphdata(processgraphData);
      console.log(result);
      console.log("OKOK");

这就是浏览器返回的内容:

 OKOK getinfo.js:135
 OK getinfo.js:86
[Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3], Array[3]] getinfo.js:87
undefined getinfo.js:137
OKOK 

1 个答案:

答案 0 :(得分:0)

这可以解决您的问题:

function getgraphdata(callback){
    var theresponse;
    $.ajax({
        type: "GET",
        url: "DiCAST_hourly.csv",
        dataType: "text",
        async: false,
        success:function(response){     
        theresponse = processgraphData(response);
        },
        error: function(){alert("Error")}
        });
    return theresponse;