Extjs для вызова веб-сервиса RESTful

Я пытаюсь сделать вызов веб-службы RESTful с помощью Extjs. Ниже приведен код, который я использую:

Ext.Ajax.request({ url: incomingURL ,
   method: 'POST',
   params: {param1:p1, param2:p2},
   success: function(responseObject){
     var obj = Ext.decode(responseObject.responseText);
     alert(obj);
   },
   failure: function(responseObject){
     var obj = Ext.decode(responseObject.responseText);
     alert(obj);
   }
});

но это не работает, запрос отправляется методом OPTIONS вместо POST.

Я также пытался сделать то же самое, используя приведенный ниже код, но результат тот же:

var conn = new Ext.data.Connection();
conn.request({
  url: incomingURL,
  method: 'POST',
  params: {param1:p1, param2:p2},
  success: function(responseObject) 
  {
    Ext.Msg.alert('Status', 'success');
  },
  failure: function(responseObject) 
  {
    Ext.Msg.alert('Status', 'Failure');
  }
});

Но когда я попытался сделать то же самое, используя базовый вызов ajax (используя объекты браузера напрямую, то есть XMLHttpRequest() или ActiveXObject ("Microsoft.XMLHTTP")), он отлично работает, и я получаю ответ, как и ожидалось.

Может ли кто-нибудь помочь мне, так как я не могу понять, что я делаю неправильно с вызовом extjs ajax?


person Vivek Singh CHAUHAN    schedule 01.12.2009    source источник
comment
Отступ 4 пробела для блочного кода. Обратные кавычки для встроенного кода.   -  person Ewan Todd    schedule 01.12.2009
comment
Я не вижу очевидной причины, по которой это будет выдавать OPTIONS вместо POST. Как выглядят переменные incomingURL, p1 и p2?   -  person Ewan Todd    schedule 01.12.2009
comment
Фрагмент, который вы предоставили (по крайней мере, первый), выглядит нормально. Я использую это каждый день. Какой браузер вы используете? Вы используете Firebug?   -  person Igor Pavelek    schedule 01.12.2009
comment
Согласен, код выглядит нормально. Каково значение incomingURL?   -  person Jonathan Julian    schedule 02.12.2009
comment
Значение входящего URL равно mymachine.com:443/cas/v1/tickets и значение параметров: {имя пользователя: p1, пароль: p2}, где p1 и p2 могут принимать значения, такие как vivek и p2, такие как testpwd. Мы пытались запустить этот код в IE7 и Firefox 3.5.5. С или без включения Firebug это поведение одинаково.   -  person Vivek Singh CHAUHAN    schedule 02.12.2009
comment
Мы пытаемся сделать ajax-вызов между двумя разными хостами, например: abc.mycompany.com делает ajax-вызовы def.mycompany.com.   -  person Vivek Singh CHAUHAN    schedule 03.12.2009
comment
Я думаю, это объяснит, что вы видите: developer.mozilla.org/En/HTTP_access_control См. раздел о предварительных запросах.   -  person    schedule 20.08.2010


Ответы (3)


Вы не можете сделать стандартный вызов AJAX между доменами. URL-адрес для Ext.Ajax.request должен быть относительным (относительно источника сценария).

Если вы хотите выполнять междоменные вызовы, используйте ScriptTagProxy или что-то подобное.

person ob1    schedule 25.05.2010

Проблема именно из-за причины, описанной ob1 и Чаком Хинсоном.

У меня есть служба RESTful, которая работает на Tomcat.

И я сделал статический клиент (не развернутый на Tomcat), используя ExtJs с читателем Json. Я только что сделал html-страницу с интегрированной службой REST ExtJs, например URL: http://localhost:8080/service/invoices/

И все время ExtJs отправлял запрос OPTIONS, а не GET или POST, даже если я устанавливал их как используемые методы. Проблема заключается в этой функции безопасности, потому что клиент не является частью одного и того же приложения, и я выполняю вызов AJAX между доменами.

Как только я поместил свой клиент в свое веб-приложение, развернул его на Tomcat и начал использовать относительные вызовы, он начал работать.

person vadimv82    schedule 03.11.2010

если вам не нужен междоменный запрос, удалите префикс веб-сайта «http://website» из свойства url прокси-сервера ajax.

person tonyzhu    schedule 10.01.2013