javascript变量显示之前的值

时间:2015-11-07 19:29:32

标签: javascript oop

这个问题应该有一些合理的解释,但我找不到任何东西。我在我的javascrtipt应用程序中使用OOP,并且我正在尝试将变量值设置为函数。

首先,值init_s.__temp_var等于空对象。在我调用函数logic_s.get_active_statuses(..)之后,它应该被覆盖。但事实并非如此。动作:

var widget = {
    settings: {
        __temp_var: {}
    },

    init: function () {
        init_s = this.settings;
        logic_s = this.functions_available;
    },

    functions_available: {
        get_active_statuses: function (id) {
            jQuery.ajax({
            url: .....,
            type: 'POST',
            dataType: 'JSON',
            data: {
                ....
            },
            success: function (data) {
                init_s.__temp_var = data; // not working
                return data; // undefined
            },
            error: function (e) {
                console.log(e.message);
            }
        });
        }
    },

    my_actions: {
        logic: function () {
            var active_services_status = logic_s.get_active_statuses(5);
            console.log(init_s.__temp_var); // should print {id : 5}
            console.log(active_services_status ); // if used with return prints "undefined"
        }
    }
};

因此,当我第一次调用logic_s.get_active_statuses(5);时,它会将空对象记录下来,但是当我第二次调用它时,它会记录我{id : 5}。如果第三个时间变量为10,它将在第4次调用后立即打印。为什么会这样?似乎变量在打印后被设置了..

修改

它的工作方式并返回“未定义”:

function get_active_status (id) {
                jQuery.ajax({
                url: .....,
                type: 'POST',
                dataType: 'JSON',
                data: {
                    ....
                },
                success: function (data) {
                    return data; // undefined
                },
                error: function (e) {
                    console.log(e.message);
                }
            });
            };

get_active_status(5); // returns "undefined" instead of object that was sended

1 个答案:

答案 0 :(得分:1)

当您使用AJAX时,您的请求为asynchronous。这意味着它在这里发送了一些请求

logic_s.get_active_statuses(5)

并且等待响应(成功仅在您收到服务器的响应后执行)并继续执行

console.log(init_s.__temp_var); // should print {id : 5}
console.log(active_services_status ); // if used with return prints "undefined"

您可以使用setTimeout(),但这会破坏异步行为的任何功能。 另一种方法 - 查找选项 async ,默认情况下为true。你的职能是:

function get_active_status (id) {
            jQuery.ajax({
            url: .....,
            type: 'POST',
            dataType: 'JSON',
            async: false,
            data: {
                ....
            },
            success: function (data) {
                return data; // undefined
            },
            error: function (e) {
                console.log(e.message);
            }
        });
        };