0

jsonObj を getJson の JavaScript コードから Java コードの handleJsonResponse に渡すにはどうすればよいですか。構文が正しい場合、JavaScriptObject をどうすればよいですか?
alert(jsonObj.ResultSet.totalResultsAvailable) が多数を返すため、jsonObj に有効なデータが含まれていることはわかっています :) --- しかし、Java に正しく渡されない方法もあります。

編集:私はそれを解決しました... jsonObj.ResultSet.Result を Java 関数に渡し、JSONArray を使用して作業します。

ありがとう。

public native static void getJson(int requestId, String url, MyClass handler) /*-{
    alert(url);
    var callback = "callback" + requestId;
    var script = document.createElement("script");
    script.setAttribute("src", url+callback);
    script.setAttribute("type", "text/javascript");

    window[callback] = function(jsonObj) { // jsonObj DOES contain data
        handler.@com.michael.random.client.MyClass::handleJsonResponse(Lcom/google/gwt/core/client/JavaScriptObject;)(jsonObj);
        window[callback + "done"] = true;
    }

    document.body.appendChild(script);

}-*/;

public void handleJsonResponse(JavaScriptObject jso) { // How to utilize JSO
    if (jso == null) { // Now the code gets past here
        Window.alert("Couldn't retrieve JSON");
        return;
    }
    Window.alert(jso.toSource()); // Alerts 'null' 
    JSONArray array = new JSONArray(jso);
    //Window.alert(""+array.size());


    }

}
4

2 に答える 2

0

toSource() は何をすべきですか? (私が見たドキュメントには、「toSource を呼び出す」とだけ書かれています。) toString() はどうですか?

への呼び出しalert(jsonObj.ResultSet.totalResultsAvailable)で有効な結果が得られた場合、jsonObj は配列ではなく JavaScript オブジェクトであることがわかります。JSONArray のコンストラクターは JS 配列のみを受け取るように見えます (例: ["item1", "item2", {"key":"value"}, ...] )

于 2010-01-22T04:51:13.057 に答える
0

この問題を解決する方法が正確にはわかりませんが、回避策を見つけました。javascript jsonObj は多次元であり、Java 関数で型を操作する方法がわかりませんでした。その代わりに、jsonObj.ResultSet.Result を関数ハンドラーに渡し、そこから JSONArray で get("string") を使用できました。

于 2010-01-22T04:55:53.753 に答える