我在数据库中有一个字符串化的对象数组,我正在使用$ .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函数?
答案 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);
});