Проблемы с получением данных из веб-сервиса с помощью Qooxdoo

Моя основная команда решила использовать Qooxdoo в качестве внешнего интерфейса для нашего проекта. Мы разрабатываем приложения для контроллеров OpenFlow с использованием NOX, поэтому мы используем инфраструктуру веб-сервисов NOX. У меня проблемы с получением данных от службы; Я знаю, что служба работает, потому что, если я перехожу по URL-адресу с помощью Firefox, появляются правильные данные. Вот соответствующая часть моего кода:

var req = new qx.io.remote.Request("http://localhost/ws.v1/hello/world",
                                   "GET", "text/plain");

req.addListener("complete", function(e) {
  this.debug(e.getContent());
});

var get = new qx.ui.form.Button("get");
get.addListener("execute", function() {
  alert("The button has been pressed");
  req.send();
}, this);
form.addButton(get);

В консоли firebug я получаю это сообщение после того, как щелкаю предупреждение:

008402 qx.io.remote.Exchange: Unknown status code: 0 (4)

И если я снова нажму кнопку «Получить», я получаю эту ошибку:

027033 qx.io.remote.transport.XmlHttp[56]: Failed with exception: [Exception... "Component returned failure code: 0x80070057 (NS_ERROR_ILLEGAL_VALUE) [nsIXMLHttpRequest.open]" nsresult: "0x80070057 (NS_ERROR_ILLEGAL_VALUE)" location: "JS frame :: file:///home/user/qooxdoo-1.0-sdk/framework/source/class/qx/io/remote/transport/XmlHttp.js :: anonymous :: line 279" data: no]

Я также просмотрел учебник Twitter Client, однако событие «dataChange», которое я установил вместо события «tweetsChanged», никогда не срабатывало. Любая помощь приветствуется, спасибо.


person Andy    schedule 05.03.2010    source источник


Ответы (1)


Это похоже на проблему междоменного запроса. qx.io.remote.Request использует XHR для передачи данных, которые могут не работать в каждом случае из-за ограничений браузера. Переключение флага crossDomain в запросе на true изменит XHR на динамически вставляемый тег script, не имеющий междоменного ограничения (но другие ограничения).

req.setCrossDomain(true);

Возможно, это решит вашу проблему. Кроме того, вы можете ознакомиться с документацией по удаленному пакету, чтобы получить дополнительные сведения о междоменных запросах: http://demo.qooxdoo.org/current/apiviewer/#qx.io.remote

Также позаботьтесь о том, чтобы не использовать объект запроса дважды. Работают только один раз.

person Martin Wittemann    schedule 05.03.2010
comment
Благодарю вас! Это была междоменная проблема, поэтому мне пришлось заставить приложение Qooxdoo обслуживаться нашим приложением NOX, а затем включить механизм предотвращения кеша, чтобы к запросу не прикреплялась строка запроса. (Полагаю, я мог бы попытаться исправить это с серверной стороны, но я сожгу этот мост, если дойду до этого.) Во всяком случае, теперь это работает! - person Andy; 07.03.2010