javascript访问函数来自命名空间ajax函数回调中的另一个命名空间

时间:2017-05-24 09:10:35

标签: javascript jquery ajax javascript-namespaces

我的javascript代码需要一些帮助。我刚刚开始使用名称空间,我遇到了一个无法解决的问题。

我有两个文件 data.js themes.js ,分别在每个数据和主题上都有一个命名空间。 在数据命名空间中,我有一个执行ajax调用的函数,如下所示:

var data = data || {};data = {
    get_companies: function (id) {
        $.ajax({
            //blah blah blah
        });
    }
}

在主题命名空间中我有一个这样的函数:

var themes = themes || {};
themes = {
    themeAdd: function () {
    //blah blah
        $.ajax({
            //blah blah
            success: function (data) {
                data.get_companies('#someid');
            }
        });
    }
}

问题是,虽然我可以从 themes.js 文件和控制台访问data.get_companies,但当我尝试在ajax回调中调用它时会产生错误(data.get_companies不是一个功能)。我该如何解决这个问题以及为什么我无法在ajax回调中访问此函数?

1 个答案:

答案 0 :(得分:1)

在你的ajax success回调中,改变传递给它的参数的名称:

$.ajax({
    //blah blah
    success: function (response) {
        data.get_companies('#someid');
    }
};

目前您使用名为data的arument定义匿名函数,因此在此函数data内部是AJAX请求所接收的内容,而不是您的全局data对象。< / p>

您也可以尝试像这样访问它:

$.ajax({
    //blah blah
    success: function (data) {
        window.data.get_companies('#someid');
    }
};