0

如何将getJson中的javascript代码中的jsonObj传递给java代码handleJsonResponse。如果我的语法正确,我该如何处理 JavaScriptObject?
我知道 jsonObj 包含有效数据,因为 alert(jsonObj.ResultSet.totalResultsAvailable) 返回一个很大的数字 :) --- 但是它没有正确地传递回 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 回答