JavaScript自定义库问题



我看了看,我仍在挠头。如果我错过了明显的东西,我深表歉意。我试图创建自己写过的自定义功能库(感谢Stackoverflow帮助我解决这个问题。...(。然后,我有一个JavaScript文件,该文件在调用网页时加载,然后又调用我的自定义库中的功能。

i具有一个称为getConfig()的函数,可以执行显而易见的功能。它获得了一个带有我的服务器配置详细信息的JSON文件,该文件托管了我所有的RESTFUL Web服务。当我逐步浏览代码时,配置详细信息将如我期望的那样返回,但是,当我全速加载网页时,配置对象以undefined返回。我认为这可能是一个时机,所以我把所有东西都包裹在$(document).ready(function())块中,但没有。我什至尝试了一个window.onload = function(){}块,以确保在调用自定义库之前加载了所有内容。没有运气!它竭尽全力,因为我一生无法弄清楚发生了什么。

我的自定义库文件看起来像FileName xtendLibs.js

var xtendLibs = {
    getConfig           :   function(){
        var CONFIG;
        $.getJSON("/js/config.json", function(json){
            CONFIG = json;
        });
        return CONFIG;
    },
    getObjects          :   function(config, medicareno, medicarelineno, objectType){
        var object;
        var urlString = config.scheme + config.muleHost + config.mulePort + ":/patients/";
        switch(objectType){
            case ("details") : 
                urlString = urlString + "details/" + medicareno + "/" + medicarelineno ;
                break;
            case ("appointments") :
                urlString = urlString + "appointments/" + medicareno +"/" + medicarelineno;
                break;
        }
        $.ajax({
            type    :   'GET',
            url     :   urlString,
            success :   function(data){
                object = data;
            },
            failure :   function(){
                alert("Failure");
            }
        });
        return object;
    },
    getUrlParameters    :   function(){
        var paramsArray = window.location.search.substring(1).split("&");
        var obj = [];
        var tempArray;
        var paramName,paramValue;
        for(var i = 0; i < paramsArray.length; i++){
            tempArray = paramsArray[i].split("=");
            paramName = tempArray[0];
            paramValue = tempArray[1];
            obj[paramName] = paramValue;
        }
        return obj;
    }
};

调用上面文件中各种函数的JavaScript文件看起来像是此appts.js

window.onload = function(){
    var config, params, appointments;
    params = xtendLibs.getUrlParameters();   // This line works - and params is returned
    config = xtendLibs.getConfig(); // This line fails but will work if I step through the code
    appointments = xtendLibs.getObjects(    config, 
                                            params["medicareno"],
                                            params["medicarelineno"],
                                            "appointments");
    console.log(params);
}

我真的很困难。任何帮助将不胜感激。

ajax是异步过程,因此,当称为getjson时,它不会停止执行下一个语句。

getConfig : function(){
     var CONFIG;
     $.getJSON("/js/config.json", function(json){
          CONFIG = json;
     });
     return CONFIG;
}

当getjson称为"切换到新线程"时,在这种情况下,下一个语句是" return config;"被执行。但是,尚未定义配置,因此它返回为未定义。

您如何解决此问题?

您无法解决这个问题。不使用此代码设计。您可以非异步AJAX,但它会使您的页面冻结。

调用" getConfig"时,您可以设置一个全局变量" config",并检查在执行与之相关的任何函数时是否定义了配置变量,但是最好的方法是传递一个函数,包含所有语句在配置完成加载后执行,在getConfig函数中,并在加载"/js/config.json"时调用它。

相关内容

  • 没有找到相关文章

最新更新