为什么 "namespace" JavaScript 文件中的函数不会填充下拉列表?

Why won't a function within a "namespace" JavaScript file populate a dropdownlist?

我有 2 个外部 JavaScript 文件,一个设置为 "namespace",另一个文件调用它。

这是我的 "namespace" 的样子

var GlobalScript = {
    GetAllStates: function () {
        $.ajax({
            type: "GET",
            url: URLParam.GetStatesForDropdown,
            contentType: "application/json; charset=utf-8",
            success: function (data, textStatus, jqXHR) {
                ShowStates(data);
            }
        })

    },
    ShowStates: function (stateData) {
        $("#acVendorState").kendoDropDownList({
            dataSource: stateData,
            dataTextField: "StateName",
            dataValueField: "StateID",
            animation: false,
            optionLabel: {
                StateName: "-- Select State --"
            }
        });
    }
}

这是调用 GetAllStates() 函数的脚本,

$(document).ready(function () {
    GlobalScript.GetAllStates();
});

现在这不起作用,但是,如果 "namespace" 文件看起来像这样...

function ShowStates(stateData){
$("#acVendorState").kendoDropDownList({
        dataSource: stateData,
        dataTextField: "StateName",
        dataValueField: "StateID",
        animation: false,
        optionLabel: {
            StateName: "-- Select State --"
        }
    });
}

var GlobalScript = {
        GetAllStates: function () {
            $.ajax({
                type: "GET",
                url: URLParam.GetStatesForDropdown,
                contentType: "application/json; charset=utf-8",
                success: function (data, textStatus, jqXHR) {
                    ShowStates(data);
                }
            })      
        }
    }

然后将填充我的具有下拉列表的视图。

我的问题是如何让它按照我的第一种方式工作,因为如果我用第二种方式做,那么按照我的方式做就毫无意义(至少据我所知)正在做。

ShowStates 不是变量。它是分配给 GlobalScript 对象的 属性。

ShowStates(data); 应该是 GlobalScript.ShowStates(data);

在您的 js 中尝试此代码

var GlobalScript = {
    GetAllStates: function () {
        var self = this; // <= self object created
        $.ajax({
            type: "GET",
            url: URLParam.GetStatesForDropdown,
            contentType: "application/json; charset=utf-8",
            success: function (data, textStatus, jqXHR) {
                self.ShowStates(data);
            }
        })

    },
    ShowStates: function (stateData) {
        $("#acVendorState").kendoDropDownList({
            dataSource: stateData,
            dataTextField: "StateName",
            dataValueField: "StateID",
            animation: false,
            optionLabel: {
                StateName: "-- Select State --"
            }
        });
    }
}