Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> RPC в GWT 
:(
    Опции темы
Sap1enS
  Дата 15.11.2008, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 10.10.2007
Где: Омск

Репутация: нет
Всего: нет



Задача довольно простая - создать реализацию клиент-серверного взаимодействия, в качестве клиента выступает GWT приложение, в качестве сервера Apache + PHP
НИКАК не могу заставить GWT работать с сервером... пробовал
1) RPC... в hosted mode не работает из-за same origin policy (SOP), у php файлов ведь урл другой... а в обычном режиме на месте получаемой с сервера информации пишет "undefined"
2) так же пробовал использовать HTTPRequest.asyncGet и чистый AJAX с помощью native-функций... получается интереснее... ответ с сервера приходит не сразу, поэтому для GWT переменные, которые получают результат работы этих функций, так и остаются пустыми... а если дополнительно выводить результат через window.alert(), то ответ к этому времени уже придет, и мы его увидим... 

вопрос - как же все-таки заставить это работать? smile 
почитал в гугл-группах, что рекомендуют использовать Timer для "торможения" выполнения запросов... однако асинхронные запросы так мне "затормозить" не удалось, и я сильно сомневаюсь в такой возможности... хотя может быть просто не там пишу?

вариант для RPC стандартный, с сайта

Код
    RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, URL.encode(jfDataURL));

        try {
          Request request = builder.sendRequest(null, new RequestCallback() {
            public void onError(Request request, Throwable exception) {
               // Couldn't connect to server (could be timeout, SOP violation, etc.)     
            }

            public void onResponseReceived(Request request, Response response) {
              if (200 == response.getStatusCode()) {
                  // Process the response in response.getText()
               resultXML = response.getText();
              } else {
                // Handle the error.  Can get the status text from response.getStatusText()
              }
            }       
          });
        } catch (RequestException e) {
          // Couldn't connect to server        
        }


HTTPRequest.asyncGet использую так

Код
        HTTPRequest.asyncGet(jfDataURL, new ResponseTextHandler() {
            public void onCompletion(final String responseText){
                Window.alert(responseText);
                resultXML = responseText;
            }
        });


заранее, спасибо
PM MAIL ICQ   Вверх
v2v
Дата 15.11.2008, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 9
Всего: 56



Цитата(Sap1enS @  15.11.2008,  17:45 Найти цитируемый пост)
в качестве клиента выступает GWT приложение

вот тут довольно интересно. Если я правильно понял у вас довольно не стандартное решение. Расскажите поподробней про GWT приложение, что собой представляет, из чего состоит, как запускается?


--------------------
PM   Вверх
Kupal3kb
Дата 20.12.2008, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 20.12.2008

Репутация: нет
Всего: нет



Если я правильно понимаю, то Вы пытаетесь сделать запрос, url У которого отличается от вашего, то есть он является сторонним. О чем нам и говорит sop. Чтобы это обойти, можно создать хендлер с нейтив методом. Например такой:

Код


package com.weather.client;

import java.util.Set;

import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONValue;
import com.google.gwt.user.client.Window;

public class WeatherBox {

    private int jsonRequestId = 0;
    private String baseURL = "http://ws.geonames.org/weatherJSON";


    private void refresh(){
        String url = baseURL + "?" /* + какие-то еще параметры */;  
        getJson(jsonRequestId++, url, this);
    }
    
    public void handleJsonResponse(JavaScriptObject jso) {
        // обработка json объекта

    }
    
    public native static void getJson(int requestId, String url, WeatherBox handler) /*-{
        var callback = "callback" + requestId;
        var script = document.createElement("script");
        script.setAttribute("src", url+'callback='+callback);
        script.setAttribute("type", "text/javascript");
    
        window[callback] = function(jsonObj) {
          [email protected]::handleJsonResponse(Lcom/google/gwt/core/client/JavaScriptObject;)(jsonObj);
          window[callback + "done"] = true;
        };
    
          // даем json'у для загрузки 3 секунды
          setTimeout(function() {
          if (!window[callback + "done"]) {
            [email protected]::handleJsonResponse(Lcom/google/gwt/core/client/JavaScriptObject;)(null);
          }
          // cleanup
          document.body.removeChild(script);
          window[callback]=null;
          window[callback + "done"]=null;
        }, 3000);
        document.body.appendChild(script);
}-*/;
    
}



PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0636 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.