繁体   English   中英

异步JSON字符串加载JavaScript

[英]Asynchronous JSON String loading JavaScript

我正在使用d3强制有向图来显示我从API获得的一些数据。 在显示它之前,它通过Java类运行,该类确实将其写入正确的json格式。
由于该程序在JavaFX WebView中运行,所以我有一个桥类,该桥类确实具有可从JavaScript调用的getter方法。
在我的主类中,我创建一个WebView并为其分配桥。 我初始化我的JSON转换器并将桥传递给它。

@Override
public void start(Stage stage) {
    try {
        new JsonTranslator(individual, depth, bridge);
        Scene scene = createScene();
        [...]           
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public static void main(String[] args) {
    launch(args);
}

private Scene createScene() {
    [...]
    try {
        JSObject jsobj = (JSObject) webEngine.executeScript("window");
        jsobj.setMember("java", bridge);
    } catch (Exception e) {
        e.printStackTrace();
    }
    [...]
}

在我的JSONTranslator类中,我编写json并将其传递给桥

private void writeFile() {
    try {
        bridge.setJSONObject(obj.toJSONString());
        FileWriter file = new FileWriter(
                "C://path/to/some/file.json"
        file.write(obj.toJSONString());
        file.flush();
        file.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

    System.out.println("Object:" + obj);
}

我也将其写入文件。 数据按预期方式打印。 现在,在我的桥中,整个getter / setter中的数据都可用。 在JSToFXBridge.java中:

public String getJSONObject(){
    System.out.println("get request: " + json);
    return json;
}

public void setJSONObject(String string){
    this.json = string;
}

现在,我从JavaScript中调用它

[...]
var draw = function(json, callback) {
[...]
    callback.call(data);
};
var data = java.getJSONObject();
draw(data);

但是,它确实会打印get request: -my json data-在控制台上,json字符串完全可以。 如果我在控制台中将其复制并粘贴为类似于var data = -my json data-的代码,则它将起作用。 仅直接从该方法分配它是行不通的。 我不知道为什么,因为我尝试异步加载它。 基于本教程 在对字符串进行修饰时是否出错? 还是这样做是错误的方式?

异步JavaScript回调的良好答案/教程可以在这里找到。 解决方案,它创造了一个新的问题[解决以及],提供了这里 通常认为这种模式:

function addOne(thenRunThisFunction) {
  waitAMinuteAsync(function waitedAMinute() {
    thenRunThisFunction()
  })
}
addOne(function thisGetsRunAfterAddOneFinishes(){})

很好地解释

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM