加载 JSON 文件模块化视图 javascript 方法
Load JSON file modular view javascript approach
我正在尝试实现模块化视图方法以在我的 javascript 代码中调用 json 文件,但无法解决该问题。我调用 json 文件的代码是一个单独的 js 文件,如下所示:
var fileConfigModule = (function () {
var arData = {};
function init() {
loadJSON(function (json) {
arData = json
});
return arData
}
// Let's hide this function
function loadJSON(callback) {
var xobj = new XMLHttpRequest();
xobj.overrideMimeType("application/json");
xobj.open('GET', './data.json', true);
xobj.onreadystatechange = function () {
if (xobj.readyState == 4 && xobj.status == "200") {
arVals= callback(JSON.parse(xobj.responseText));
}
};
xobj.send(null);
}
return {
loadJSON: loadJSON,
init: init
}
})();
我想在我的主文件中使用这个模块来从类似 aysnc 的文件中加载 json。这使用回调函数。
var arData = fileConfigModule.init();
如果有人可以提供帮助,请指出我在这里做错了什么。非常感谢
您正在调用一个异步函数,但期望 return 值为同步函数。
按如下方式更新您的代码,
var fileConfigModule = (function () {
function init(callback) {
loadJSON(function (json) {
callback(json);
});
}
// Let's hide this function
function loadJSON(callback) {
var xobj = new XMLHttpRequest();
xobj.overrideMimeType("application/json");
xobj.open('GET', './data.json', true);
xobj.onreadystatechange = function () {
if (xobj.readyState == 4 && xobj.status == "200") {
callback(JSON.parse(xobj.responseText));
}
};
xobj.send();
}
return {
loadJSON: loadJSON,
init: init
}
})();
然后调用如下,
var arData = null;
fileConfigModule.init(function(data){
arData = data;
});
我不知道你为什么要隐藏 loadJSON
功能。但我认为你应该直接使用loadJSON
函数,而不是调用init
函数。
呼叫 loadJSON
,
var arData = null;
fileConfigModule.loadJSON(function(data){
arData = data;
});
我正在尝试实现模块化视图方法以在我的 javascript 代码中调用 json 文件,但无法解决该问题。我调用 json 文件的代码是一个单独的 js 文件,如下所示:
var fileConfigModule = (function () {
var arData = {};
function init() {
loadJSON(function (json) {
arData = json
});
return arData
}
// Let's hide this function
function loadJSON(callback) {
var xobj = new XMLHttpRequest();
xobj.overrideMimeType("application/json");
xobj.open('GET', './data.json', true);
xobj.onreadystatechange = function () {
if (xobj.readyState == 4 && xobj.status == "200") {
arVals= callback(JSON.parse(xobj.responseText));
}
};
xobj.send(null);
}
return {
loadJSON: loadJSON,
init: init
}
})();
我想在我的主文件中使用这个模块来从类似 aysnc 的文件中加载 json。这使用回调函数。
var arData = fileConfigModule.init();
如果有人可以提供帮助,请指出我在这里做错了什么。非常感谢
您正在调用一个异步函数,但期望 return 值为同步函数。
按如下方式更新您的代码,
var fileConfigModule = (function () {
function init(callback) {
loadJSON(function (json) {
callback(json);
});
}
// Let's hide this function
function loadJSON(callback) {
var xobj = new XMLHttpRequest();
xobj.overrideMimeType("application/json");
xobj.open('GET', './data.json', true);
xobj.onreadystatechange = function () {
if (xobj.readyState == 4 && xobj.status == "200") {
callback(JSON.parse(xobj.responseText));
}
};
xobj.send();
}
return {
loadJSON: loadJSON,
init: init
}
})();
然后调用如下,
var arData = null;
fileConfigModule.init(function(data){
arData = data;
});
我不知道你为什么要隐藏 loadJSON
功能。但我认为你应该直接使用loadJSON
函数,而不是调用init
函数。
呼叫 loadJSON
,
var arData = null;
fileConfigModule.loadJSON(function(data){
arData = data;
});