离开范围时丢失数据

时间:2015-05-27 13:22:15

标签: javascript ajax scope

我正在用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: []
}

我认为我包含了重要的代码 提前谢谢!

4 个答案:

答案 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调用