2010-01-22 6 views
0

Comment transmettre jsonObj du code javascript dans getJson au code java handleJsonResponse. Si ma syntaxe est correcte, que faire avec JavaScriptObject?
Je sais que le jsonObj contient des données valides parce que alert (jsonObj.ResultSet.totalResultsAvailable) renvoie un grand nombre :) --- mais comment il n'est pas passé correctement en Java.Débogage de JSON dans GWT (serveur croisé)

EDIT: Je l'ai résolu ... en transmettant jsonObj.ResultSet.Result à la fonction java et en y travaillant à l'aide d'un JSONArray.

Merci.

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()); 


    } 

} 

Répondre

0

Vous ne savez pas trop comment résoudre ce problème que j'avais, mais j'ai trouvé une solution de contournement. Le javascript jsonObj est multidimensionnel, et je ne savais pas comment manipuler les types dans la fonction java. Donc à la place, j'ai passé jsonObj.ResultSet.Result à mon gestionnaire de fonction, et de là j'ai pu utiliser get ("string") sur le JSONArray.

0

Que doit faire toSource()? (La documentation que je vois pour cela dit simplement "calls toSource".) Qu'en est-il de toString()?

Si votre appel à alert(jsonObj.ResultSet.totalResultsAvailable) donne un résultat valide, cela signifie que jsonObj est un objet JavaScript et non un tableau. Il me semble que le constructeur pour JSONArray ne prend qu'un JS Array (par exemple, ["item1", "item2", {"key": "value"}, ...])