Я работаю над веб-приложением GWT, которое должно взаимодействовать с общим веб-сервером. К сожалению, сервер поддерживает только PHP, поэтому я не могу использовать GWT RPC. Вот почему я хочу использовать простой PHP-скрипт на стороне сервера, который возвращает все необходимые данные в формате JSON. Поскольку я довольно новичок в GWT, мой код основан на следующем примере:
http://code.google.com/p/google-web-toolkit-doc-1-5/wiki/GettingStartedJSON
Сценарий PHP, кажется, работает нормально. Firebug показывает мне возвращенные данные JSON и порт 200:
Ответ:
[{"key1":"k1","value1":"v1"},{"key2":"k2","value2":"v2"},{"key2":"k3","value3":"v3]
Однако ответ никогда не обрабатывается. Вот мой код:
private static final String JSON_URL = "http://www.myUrl/myScript.php";
public HashMap<String, Integer> loadCalendarTable(String p1, String p2) {
table = new HashMap<String, Integer>();
String url = JSON_URL+"?p1="+p1+"&p2="+p2;
url = URL.encode(url);
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, url);
try {
Request request = builder.sendRequest(null, new RequestCallback() {
public void onError(Request request, Throwable exception) {
Window.alert("Couldn't retrieve JSON");
}
public void onResponseReceived(Request request, Response response) {
if (200 == response.getStatusCode()) {
try {
// parse the response text into JSON
JSONValue jsonValue = JSONParser.parse(response.getText());
JSONArray jsonArray = jsonValue.isArray();
if (jsonArray != null) {
HashMap<String, Integer> hm = updateTable(jsonArray);
}
else
throw new JSONException();
}
catch (JSONException e) {
Window.alert("Could not parse JSON");
}
}
else
Window.alert("Couldn't retrieve JSON (" + response.getStatusText() + ")");
}
});
//(*)
}
catch (RequestException e) {
Window.alert("Couldn't retrieve JSON");
}
return table;
}
private HashMap<String, Integer> updateTable(JSONArray array) {
//do something
return table;}
При выполнении приложения на веб-сервере не возникает никаких исключений и не появляется никаких предупреждений. Используя некоторые предупреждения (которые я опускал в приведенном выше коде для удобства чтения), я заметил, что инструкция try в новом RequestBuilder () выполнена. Другое предупреждение в (*) показывает, что инструкция try пройдена. (Никаких исключений не происходит, как упоминалось ранее). Очевидно, что метод onResponseReceived () никогда не выполняется. Я никогда не вызывал этот метод, поэтому это может быть причиной моей проблемы. Но тогда я не понимаю, где мне следует вызывать onResponseReceived ().
Примечание:
Я опустил свой PHP-скрипт, потому что он фактически такой же, как показано в онлайн-примере (http://code.google.com/p/google-web-toolkit-doc-1-5/wiki/GettingStartedJSON). Кроме того, похоже, что скрипт работает правильно.