我看了看,我仍在挠头。如果我错过了明显的东西,我深表歉意。我试图创建自己写过的自定义功能库(感谢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"时调用它。