我有一个JSON / API加载回调函数,我用来读取JSON数据的var json = JSON.parse(response);
位于其中:
// Call JSON File
function loadJSON(callback) {
xobj.overrideMimeType("application/json");
xobj.open('GET', 'pmApp.json', true);
xobj.onreadystatechange = function () {
if (xobj.readyState == 4 && xobj.status == "200") {
// Required use of an anonymous callback as .open will NOT return a value but simply returns undefined in asynchronous mode
callback(xobj.responseText);
}
};
xobj.send(null);
};
// Run loadJSON -
loadJSON(function (response) {
// Parse JSON string into object
var json = JSON.parse(response);
});
var json
是一个局部变量,我希望保持这种状态(我不想将其设置为全局变量来解决我的问题),但是我有一些函数可以通过HTML onChange
事件或需要json
var才能正常运行的全局范围内的示例:
//Global Scope
popBrandFields()
function popBrandFields(){
var brand_items = json.brands[0][client];
};
我无法校准popBrandFields(json)
,因为var json
由于位于本地范围而无法访问。 (出于安全考虑,我想保留这种方式,将其放在全局范围内可以解决我的问题,但我希望将其保留在本地范围内。)
实现此目标的最佳方法是什么?
我当时想从定义的函数中返回var json
,但是我不确定如何或是否可以将这种类型的函数设置为变量,如以下示例所示:
function f(){
var foo = 100;
return foo;
}
var a = f();
也许有更好的方式加载JSON,如果有人知道的话,它可以实现我正在寻找的东西?
答案 0 :(得分:0)
您可以确保所有需要该值的代码都在SEF(自我执行功能)中。
它将在函数内部创建一个作用域,您可以在其中定义各种事物,但不会污染全局作用域。
var globalVariable = 'bad'
(function(){
var json = 'not a global variable';
console.log('Your code goes here!');
})();
答案 1 :(得分:0)
我发现的解决方案是创建一个保存其余代码和var的函数,然后从传递给loadJSON
var的json
函数进行调用,以便我的新函数可以访问就像这样
loadJSON(function (response) {
// Parse JSON string into object
var json = JSON.parse(response);
jsonUsingFunction(json);
});
这样,我的所有变量都不在全局范围内。
我还没有使用HTML中的onChange
,而是使用事件侦听器来解决我的问题!