AJAX响应成一个对象

时间:2014-07-02 19:38:19

标签: javascript ajax arrays

我在数据库中有一个字符串化的对象数组,我正在使用$ .ajax调用进行检索。我正在尝试使用回调函数将数据放入我的ajax函数之外的数组中。

function getMap(){
    return $.ajax({
    url: "getMap.php",
    type: "POST",
    data: "",
    dataType: 'JSON',
    success: dataHandler
    });
};
function dataHandler(data){
    console.log(JSON.parse(data));
    return JSON.parse(data);
}

var loadedMap = getMap();
console.log(loadedMap);

dataHandler函数内部的console.log在我的Javascript控制台中显示为标准数组(可单击,可以查看所有数据)。最后的console.log在控制台中显示为[object Object]。我可以在“responseJSON”字段中看到该对象内部的实际数据,但我似乎无法正确地将其添加到loadedMap数组中。

我在这里缺少什么?

编辑:我觉得我的问题与其他问题的所有答案都不同。我似乎更像是一个范围问题。很多答案主张使用.done和.fail方法来处理AJAX。

var loadedMap = [];
function getMap(){
    return $.ajax({
    url: "getMap.php",
    type: "POST",
    dataType: 'JSON',
    });
};
getMap().done(function(r) {
    if (r) {
       loadedMap = r;
    } else {
       console.log("No data");
    }
}).fail(function(x) {
    console.log("error");
});
console.log(loadedMap);

这段代码成功获取了“loadedMap = r”的数组,但是当你在console.log上面加载了外部的map时,它是未定义的。我们怎样才能让实际数据超出AJAX函数?

2 个答案:

答案 0 :(得分:0)

函数getMap不返回响应,只是在响应到达时调用dataHandler。 创建一个全局变量,并将JSON.parse(数据)的vallue分配给该变量。 :

    var myData;
    function getMap(){
...
    });
    };
    function dataHandler(data){
        console.log(JSON.parse(data));
        myData = JSON.parse(data);
    }
getMap();

答案 1 :(得分:0)

JQuery的AJAX返回一个承诺,所以你可以选择回调路线,因为它看起来像你试图做的那样,或者你可以用promises简化它:

function getMap(){
    return $.ajax({
    url: "getMap.php",
    type: "POST",
    data: "",
    dataType: 'JSON',
    success: dataHandler
    });
};

getMap().then(function(data){
    loadedMap = JSON.parse(data);
    console.log(loadedMap);
});