Отладка JSON в GWT (кросс-сервер) - PullRequest
0 голосов
/ 22 января 2010

Как передать jsonObj из кода javascript в getJson в код 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());


    }

}

Ответы [ 2 ]

0 голосов
/ 22 января 2010

Не совсем уверен, как решить эту проблему, но я нашел обходной путь. Javascript jsonObj является многомерным, и я не знал, как манипулировать типами в функции Java. Поэтому вместо этого я передал jsonObj.ResultSet.Result своему обработчику функций и оттуда смог использовать get ("string") для JSONArray.

0 голосов
/ 22 января 2010

Что должен делать toSource ()? (Документация, которую я вижу для этого, просто говорит «вызывает toSource».) Как насчет toString ()?

Если ваш вызов alert(jsonObj.ResultSet.totalResultsAvailable) дает правильный результат, это говорит о том, что jsonObj - это объект JavaScript, а не массив. Мне кажется, что конструктор для JSONArray принимает только массив JS (например, ["item1", "item2", {"key": "value"}, ...])

...