javascript - 异步 JSON 字符串加载 JavaScript

标签 javascript java json asynchronous

我正在使用 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- 一样,它就可以工作。仅从方法中直接指定它是行不通的。我不明白为什么,因为我尝试异步加载它。基于this tutorial 。我在拉绳子时犯了错误吗?或者说这是一种错误的做法?

最佳答案

可以找到异步 JavaScript 回调的良好答案/教程 here 。解决方案,产生了一个新问题[也已解决],提供here 。 一般来说,考虑一下这种模式:

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

解释得很好

关于javascript - 异步 JSON 字符串加载 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33868755/

相关文章:

Javascript 无法正确解析 JSON 中的对象

javascript - 使用 jquery 将 json 转换为字符串

javascript - Backbone.js:在不保存的情况下上演新模型

java - 如何在 IRC 服务器中发送消息进行聊天?

java - Maven 集成测试失败问题

java - 如何释放与Apache http客户端属性的连接?

c# - DataTable 到复杂嵌套 JSON

javascript - JavaScript 中字符串的长度

javascript - 为什么只写一个字段而不用它做任何事情?

PHP 代码无法运行