json から値を取得する必要があります。返されたオブジェクトで完全に機能しますが、ブール値のように json 値だけを取得することがあります。そして、GWT で返された json から取得できません。
GWT チュートリアルの StockWatcher と同じように、json を取得するための JSNI 関数 getJson() があります。これは、返された文字列が JavaScriptObject に変換される関数の関連部分だと思いますか?
// [2] Define the callback function on the window object.
window[callback] = function(jsonObj) {
// [3]
handler.@cz.metacentrum.perun.webgui.json.JsonClient::handleJsonResponse(Lcom/google/gwt/core/client/JavaScriptObject;)(jsonObj);
window[callback + "done"] = true;
}
// [4] JSON download has a timeout.
setTimeout(
function() {
if (!window[callback + "done"]) {
handler.@cz.metacentrum.perun.webgui.json.JsonClient::handleJsonResponse(Lcom/google/gwt/core/client/JavaScriptObject;)(null);
}
// [5] Cleanup. Remove script and callback elements.
document.body.removeChild(script);
delete window[callback];
delete window[callback + "done"];
}, timeout);
これもチュートリアルに基づいたハンドラー関数を呼び出します。
public void handleJsonResponse(JavaScriptObject jso){
// if an ERROR
if (jso == null) {
this.module.onError();
return;
}
// OK
this.module.onFinished(jso);
}
問題は. ブール値を受け取ると、JavaScriptObject として解析されず、タイムアウトが原因で onError() になります。
返される json 文字列は次のようになります。タイムアウトするまでに長い時間がかかります。だから私は、 getJson() はそれを解析できないと思いますか?
プログラムの残りの部分で動作するように JavaScriptObject に解析するにはどうすればよいですか? getJson() のセクション [3] に IF ステートメントが必要だと思います。どの値の型が返され、どのハンドラー関数を呼び出すかを決定します。ここで戻り値から手動でオブジェクトを作成し、それを既存のハンドラーに渡します。しかし、私はそれを正しく行う方法がわかりません。ブール値のoverlayTypeを作成しようとしましたが、返された文字列がjsoとして解析されないため、役に立ちません。
助けてくれてありがとう。