Javascript AJAX对对象的响应
我在数据库中有一个字符串化的对象数组,我正在使用$.ajax调用检索它。我试图使用回调函数将数据放入ajax函数之外的数组中Javascript AJAX对对象的响应,javascript,ajax,arrays,Javascript,Ajax,Arrays,我在数据库中有一个字符串化的对象数组,我正在使用$.ajax调用检索它。我试图使用回调函数将数据放入ajax函数之外的数组中 function getMap(){ return $.ajax({ url: "getMap.php", type: "POST", data: "", dataType: 'JSON', success: dataHandler }); }; function dataHandler(data){ con
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]。我可以在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的数组,但当您在外部对loadedMap进行console.log时,其未定义。我们如何才能使实际数据位于AJAX函数之外?函数getMap不返回响应,它只是在响应到达时调用dataHandler。 创建一个全局变量,并将JSON.parsedata的值分配给该变量:
var myData;
function getMap(){
...
});
};
function dataHandler(data){
console.log(JSON.parse(data));
myData = JSON.parse(data);
}
getMap();
JQuery的AJAX会返回一个承诺,因此您可以按照您之前尝试的方式进行回调,也可以通过承诺来简化它:
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);
});
你能展示一下responseJSON的样子吗?LoadedMap不是一个数组,而是你正在制作的ajax。您需要在dataHandler函数内部工作,以获得json数据或从以下位置调用另一个函数:[[{type:land},{type:grass},{type:mountains},{type:water},{type:water}],{type:land},{type:land},{type:grass},{type:land},{type:mountains}]]一个对象数组,通过指定数据类型:“json”注意:应该是小写,jQuery将已经尝试解析响应,并且在解析失败时出错。数据可能已经是一个JavaScript数组,使用JSON.parsedata可能是多余的。另外,@bo_知道问题不在于范围,而在于执行的时间。ajax是异步的,这意味着不同时执行,代码将在单独的部分执行-1 getMap和console.logloadedMap,然后2 functor和loadedMap=r;,导致loadedMap在被记录后被分配了预期的值。如果它是字符串,这可能会起作用,但在尝试此操作时,我会遇到未定义的错误。这是有效的,但是loadedMap的作用域现在在thenfunctiondata调用内。在它之后执行console.log会产生一个未定义的错误,这是AJAX的本质,它是事件驱动的。在后台,JQuery后面是一个XmlHttpRequest,它有一个onload事件调用。不管你怎么做,你最终都会得到一个封闭范围内的响应。有什么方法可以解决这个问题吗?我觉得我的问题不是一个AJAX问题,而是一个范围问题。您或多或少需要重新思考如何调用和使用数据。Javascript是事件驱动语言的核心,因此在解决问题时,您必须开始考虑这一点。