GWT JsonpRequestBuilder Тайм-аут проблема - PullRequest
5 голосов
/ 08 марта 2010

Я получаю время от использования JsonpRequestBuilder.

Код точки входа выглядит следующим образом:

// private static final String SERVER_URL = "http://localhost:8094/data/view/";
private static final String SERVER_URL = "http://www.google.com/calendar/feeds/developer-calendar@google.com/public/full?alt=json-in-script&callback=insertAgenda&orderby=starttime&max-results=15&singleevents=true&sortorder=ascending&futureevents=true";
private static final String SERVER_ERROR = "An error occurred while "
        + "attempting to contact the server. Please check your network "
        + "connection and try again.";

/**
 * This is the entry point method.
 */
public void onModuleLoad() {

    JsonpRequestBuilder requestBuilder = new JsonpRequestBuilder();
    // requestBuilder.setTimeout(10000);
    requestBuilder.requestObject(SERVER_URL, new Jazz10RequestCallback());

}

class Jazz10RequestCallback implements AsyncCallback<Article> {


    @Override
    public void onFailure(Throwable caught) {
        Window.alert("Failed to send the message: " + caught.getMessage());     
    }

    @Override
    public void onSuccess(Article result) {
        // TODO Auto-generated method stub
        Window.alert(result.toString());
    }

Класс статьи просто:

import com.google.gwt.core.client.JavaScriptObject;

public class Article extends JavaScriptObject {


    protected Article() {};


}

Однако на странице gwt всегда выполняется обратный вызов onFailure () и отображается это предупреждение:

Failed to send the message. Timeout while calling <url>.

Невозможно увидеть что-либо на консоли подключаемого модуля Eclipse. Я попробовал URL-адрес, и он отлично работает.

Буду признателен за советы по технике отладки или предложения

Ответы [ 4 ]

4 голосов
/ 09 марта 2010

Возможно, вам следует установить функцию обратного вызова в явном виде через setCallbackParam, поскольку в вашем URL-адресе callback=insertAgenda - я предполагаю, что это информирует сервер о том, каким должно быть имя функции обратного вызова, которая переносит JSON. Кроме того, стоит проверить консоль Firebug (или аналогичный инструмент для вашего браузера) - даже если GWT не сообщает о каких-либо исключениях, Firebug по-прежнему может.

PS: Полезно использовать такой инструмент, как Firebug, чтобы узнать, действительно ли приложение получает ответ от сервера (это может означать, например, что вам нужен вызов setCallbackParam) или, возможно, что-то не так на стороне сервера (по какой-либо причине).

0 голосов
/ 12 июля 2013

Это может произойти по другой причине: вызов веб-службы возвращает объект JSON, но обратный вызов ожидает объект JSONP (обратите внимание, что есть различие).

Так что, если вы имеете дело с API-интерфейсом Google Maps и видите это исключение, вам нужно изменить его на API, предоставляемый API-картами, что-то типа

    final GeocoderRequest request = GeocoderRequest.create();
    request.setAddress(query);
    try {
        GWT.log("sending GeoCoderRequest");
        if (m_geocoder == null) {
            m_geocoder = Geocoder.create();
        }

        m_geocoder.geocode(request, new Geocoder.Callback() {
            @Override
            public void handle(final JsArray<GeocoderResult> results,
                    final GeocoderStatus status) {
                handleSuccess(results, status);
            }
        });
    } catch (final Exception ex) {
        GWT.log("GeoCoder", ex);
    }

Или вы можете использовать RequestBuilder как в библиотеке gwt.

0 голосов
/ 25 марта 2013

Оба эти парня абсолютно правы, но вот конкретный пример, который поможет вам точно понять, на что они ссылаются.

Это публичный JSON API.Посмотрите на результаты:http://ws.geonames.org/postalCodeLookupJSON?postalcode=M1&country=GB&maxRows=4Этот публичный API поддерживает JSONP через предопределенный параметр «обратный вызов».В основном, любое значение, которое вы передаете в обратный вызов, будет использоваться в качестве имени функции, чтобы обернуть данные JSON по вашему желанию.Посмотрите на результаты этих нескольких запросов:http://ws.geonames.org/postalCodeLookupJSON?postalcode=M1&country=GB&maxRows=4&callback=totallyMadeUp

http://ws.geonames.org/postalCodeLookupJSON?postalcode=M1&country=GB&maxRows=4&callback=trollingWithJSONP

0 голосов
/ 30 ноября 2011

Вы должны прочитать параметр запроса обратного вызова (по умолчанию callback, значение что-то вроде __gwt_jsonp__.P0.onSuccess) на серверном сайте и должны изменить вывод на

<callback>(<json>);

В этом случае:

__gwt_jsonp__.P0.onSuccess(<json>);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...