我正在用javascript编写一些东西,但有一次我做了一个ajax调用 我将数据存储在对象文字中,但是当我离开范围时,我会丢失数据(即使在我的对象文字中)
我不明白这里发生了什么
var menusView = {
menusRep: null,
init: function () {
this.menusRep = menusRepository;
this.getMenus();
},
getMenus: function () {
$.ajax({
url: 'data/voordeelmenus.json',
dataType: 'json',
success: function (data) {
menusView.menusRep.menus = data;
console.log(data);//console output: [object, object,...]
console.log(menusView.menusRep.menus);//console output: [object, object,...]
},
error: function (error) {
alert("error reading file: " + error);
}
});
console.log(menusView.menusRep.menus); //console output: []
}
}
var menusRepository = {
menus: []
}
我认为我包含了重要的代码 提前谢谢!
答案 0 :(得分:1)
我认为这是由于AJAX的异步性以及您如何使用它。最终的console.log在AJAX调用完成之前触发,因此在创建console.log时数据不可用。
我看到你有几个选择。您可以在成功回调中使用返回的数据,在处理返回数据的成功回调中使用另一种方法,或者可以将async设置为false以阻塞方式处理AJAX请求。
$.ajax({
url: 'data/voordeelmenus.json',
dataType: 'json',
async: false,
success: function (data) {
menusView.menusRep.menus = data;
console.log(data);//console output: [object, object,...]
console.log(menusView.menusRep.menus);//console output: [object, object,...]
},
error: function (error) {
alert("error reading file: " + error);
}
});
答案 1 :(得分:0)
那
console.log(menusView.menusRep.menus); //console output: []
必须在ajax调用中,因为它是异步的。否则它将永远是空的
编辑:请记住致电
menusView.init();
否则,menusView.menusRep将为null
希望它有所帮助,
丹
答案 2 :(得分:0)
你基本上有2行
$.ajax(...)
console.log(...)
ajax行调度ajax调用和将在ajax调用返回时调用的回调,但不阻塞:它是异步的。
安排完成后,调用console.log但尚未设置菜单。只有在ajax调用返回时才会设置它。
答案 3 :(得分:0)
您的ajax调用是异步的。
所以当你的代码执行到达console.log(menusView.menusRep.menus)时; 那时你的对象没有收到任何数据。
把你的console.log(menusView.menusRep.menus);内部成功处理程序的ajax调用