2010-01-22 26 views
0

如何將jsonObj從getJson中的javascript代碼傳遞給java代碼handleJsonResponse。如果我的語法正確,我該如何處理JavaScriptObject?
我知道jsonObj包含有效的數據,因爲alert(jsonObj.ResultSet.totalResultsAvailable)返回一個很大的數字:) ---但是有些它沒有正確地傳遞迴Java。在GWT中調試JSON(跨服務器)

編輯:我解決了它...通過將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 
     [email protected]::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()); 


    } 

} 

回答

0

不完全確定如何解決這個問題,我有,但我找到了解決方法。 javascript jsonObj是多維的,我不知道如何操作java函數中的類型。所以相反,我將jsonObj.ResultSet.Result傳遞給了我的函數處理程序,並且從那裏我可以在JSONArray上使用get(「string」)。

0

什麼是toSource()應該做的? (我看到它的文檔只是說「調用toSource」。)怎麼樣toString()?

如果您對alert(jsonObj.ResultSet.totalResultsAvailable)的調用產生有效結果,那告訴我jsonObj是一個JavaScript對象,而不是一個數組。在我看來像JSONArray的構造函數只需要一個JS Array(例如[「item1」,「item2」,{「key」:「value」},...])