Запрос JQuery .ajax не попадает на сервер - PullRequest
2 голосов
/ 25 мая 2010

Я делаю ajax-запрос, используя JQuery, который выглядит следующим образом: var data = createXMLdata(); $.ajax({ url: '<a href="http://localhost:8080/foo/bar" rel="nofollow noreferrer">http://localhost:8080/foo/bar</a>', type: "PUT", data: data, processData: false, contentType: "application/text", error: function(xhr, status, error) { alert("Error: " + status); }, success: function() { alert("Success!"); } });

Когда код выполняется, я получаю предупреждение об успешном выполнении, но служба никогда не выполняется на сервере!

Вот еще несколько данных:

  • Если я сделаю тот же запрос, используя отдельный REST-клиент , служба будет выполнена правильно
  • Если я выключу сервер (ничего не работает), чтобы при нажатии на этот URL-адрес я получил 404, я все равно получу сообщение об успехе.
  • Я попытался заменить данные на «foo». Это работает с клиента REST, но дает тот же результат из кода.

Любые идеи приветствуются!

Ответы [ 3 ]

2 голосов
/ 25 мая 2010

Документация об атрибуте .ajax() type гласит:

Тип запроса («POST» или «GET»), по умолчанию «GET». Примечание. Другие методы HTTP-запроса, такие как PUT и DELETE, также могут использоваться здесь, но они поддерживаются не всеми браузерами .

Так что, вероятно, ваш браузер не поддерживает PUT, а данные отправляются через POST (и поэтому не распознаются вашей службой).
Используйте Firebug или аналогичный, чтобы узнать, какой метод используется.


Одна идея, чтобы заставить его работать:

Отправьте данные, используя POST, но добавьте дополнительное поле, например. __http_method=PUT. На стороне сервера ваша служба должна распознать это и выполнить функцию PUT.

Возможно, это не самое удачное решение, но оно также используется другими фреймворками, с которыми я сталкивался (например, symfony для PHP).

0 голосов
/ 04 июня 2010

Ник Крэйвер прокомментировал мой вопрос:

Служит ли страница, на которой вы работаете, с порта 8080?

Оказывается, это привело меня к решению проблемы. Когда приложение и служба были размещены на одном сервере (и порте), проблема исчезла.

В этом сообщении предполагается, что если я комментирую ответы на вопрос, а комментатор не публикует их повторно, я должен опубликовать свой собственный ответ и принять его. Ник, если ты вернешься, чтобы опубликовать это как ответ, я приму это вместо своего.

0 голосов
/ 25 мая 2010

PUT поддерживается не всеми браузерами

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...