我的目标是从外部对象更改一个值,该对象由json调用中的数据设置。
我在文件1(file1.js)中有一个对象。该对象从外部json文件(setting.json)获取其设置。对象通过json调用检索这些设置。
file1.js
$(document).ready(function () {
let example;
$.getJSON( "setting.json", function(data) {
// create object based on settings
example = new ExampleObject(data);
}).fail(function(e) {
console.warn(e);
}).always(function() {
console.log("ExampleObject after json call: ");
console.log(example);
window.exampleObject = example; // is still undefined in other js file cause that runs before this finishes.
});
window.exampleObject = example; // is undefined cause json fetch finishes after setting this.
});
class ExampleObject{
constructor(settings){
this.width = settings.width;
this.height = settings.height;
}
setWidth(width){
this.width = width;
}
setHeight(height){
this.height = height;
}
}
setting.json
{
"width": 3,
"height": 4
}
这有效,但现在我想从第三方文件(file2.js)中获取此对象,以便更改某些值。
我意识到对象是未定义的,因为file2.js在file1.js中的json调用之前完成。
我希望file1.js独立运行,因此如果file2.js不存在,file1.js仍然可以运行。 那么是否有一种方法可以等待另一个文件中的jsoncall,以便它在全局范围内正确设置对象?
如果没有。人们将如何处理?
file2.js
$(document).ready(function () {
// get object from global object
console.log(window.exampleObject);
// cant run this line since window.exampleObject is undefined.
window.exampleObject.setWidth(6);
console.log(window.exampleObject);
});
如果不清楚,请询问。
注意:json调用不适用于本地文件存储。您将需要石灰xamp来自己运行。