簡體   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