2010-05-25 4 views
2

Я делаю запрос Ajax с помощью JQuery, которая выглядит следующим образом: JQuery .ajax запрос не попадает на сервер

 
var data = createXMLdata(); 
$.ajax({ 
    url: ' http://localhost:8080/foo/bar ', 
    type: "PUT", 
    data: data, 
    processData: false, 
    contentType: "application/text", 
    error: function(xhr, status, error) { 
     alert("Error: " + status); 
    }, 
    success: function() { 
     alert("Success!"); 
    } 
});

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

Вот еще некоторые данные:

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

Любые идеи очень ценятся!

+3

Является ли страница, с которой вы работаете, также используется с порта 8080? –

+0

Нет, это не так.Я использую Aptana, поэтому при разработке страницы запустили свой встроенный в памяти веб-сервер на порту 8000. – Brian

+0

Aha! Я развернул код для tomcat (где мои службы RESTful развернуты), и служба получила правильное обращение. Возможно, это была проблема межсайтового скриптинга. Все еще не уверен, почему JQuery вызывал обратный вызов успеха в этом случае. Ник, если вы разместите свой комментарий в качестве ответа, я приму его. – Brian

ответ

0

Nick Craver сделал комментарий на мой вопрос:

страница вы бежите это подается с портом 8080?

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

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

2

documentation about .ajax() «s type атрибут говорит:

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

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


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

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

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

+0

Я пробовал в Firefox, Chrome и IE. Firefox и Chrome ведут себя так, как описано, IE дает мне ошибку «Отказано в доступе» (я полагал, что доберусь до тех пор, пока не запустил приложение 8080). Считаете ли вы, что проблема PUT - проблема? Если PUT не поддерживался, не следует ли мне получать сообщение об ошибке, а не сообщение об успешном завершении? – Brian

+0

Хмм - Я пробовал использовать POST, а не PUT, и я вижу такое же поведение. Я должен называть это неправильно. – Brian

0

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

+0

Феликс избил меня! – Brett

Смежные вопросы