JSON调用不同文件后获取对象

时间:2019-02-18 19:33:51

标签: javascript jquery json

我的目标是从外部对象更改一个值,该对象由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来自己运行。

0 个答案:

没有答案