проблема с ajax - 200 OK в firebug, но красное сообщение без тела ответа - PullRequest
21 голосов
/ 08 февраля 2010

У меня небольшая проблема ajax, связанная с кросс-доменом.

На localmachine я создал пример html с некоторым ajax: в текстовом поле регистрации пользователь вводит имя пользователя, при каждом нажатии клавиши AJAX отправляет его локальный Tomcat, где сервлет проверяет, используется ли это имя пользователя и отправляет «взятый» ответ.

Нет проблем на локальном хосте вообще. Как только я ввожу, используется 'username', сервлет отправляет 'взял' ответ и браузер отображает его.

Но, когда я ставлю тестовую страницу HTML с ajax на удаленной машине (некоторые бесплатные хостинг в удаленной сети) который отправляет запрос проверки на мой локальный хост Tomcat, соединение установлено, в консоли Tomcat я вижу поступление запроса, и в Firebug в Mozzila это вывод консоли:

GET http://89.216.182.25:8080/Dinamicki1/UsernameServlet?username=zik 200 OK

... но на вкладке ответа нет ответа сервлета "принято" и сообщение в firebug красным цветом

Итак, серверы общаются хорошо, проблем с брандмауэром нет, ответ 200 OK
Но тело ответа пусто.

Есть идеи, что это за красные сообщения в клопах?

Заранее большое спасибо.

И если кто-нибудь может порекомендовать какой-нибудь серьезный учебник по ajax для java это будет высоко оценено :) 1020 *

Ответы [ 6 ]

17 голосов
/ 08 февраля 2010

Вам необходимо использовать относительный к домену URL в своем запросе Ajax:

/Dinamicki1/UsernameServlet?username=zik

Или контекстно-зависимый URL (при условии, что страница обслуживается с /Dinamicki1):

UsernameServlet?username=zik

Что касается «Учебника по Ajax для Java», то на самом деле его нет. Это всего лишь две отдельные технологии. Однако я бы рекомендовал начать с jQuery (для клиентской части) и Google Gson (для серверной части) и JSON (в качестве языка связи между клиент и сервер).

5 голосов
/ 08 февраля 2010

Вы не можете использовать AJAX для чтения ответов из других доменов.

Ваш HTML должен находиться на том же сервере (и в том же домене, порту и протоколе), что и сервлет AJAX.

2 голосов
/ 08 февраля 2010

Состояние 200, указанное в Firebug, не указывает на допустимость междоменного вызова Ajax, будь он успешным или нет.

Возможно, вы захотите попробовать использовать прокси-метод для выполнения вызова.

например. JavaScript: использование веб-прокси для междоменных вызовов XMLHttpRequest

1 голос
/ 21 октября 2010

Я понял, как решить эту проблему с этого сайта :

  1. "Чтобы разрешить просмотр каталогов через Apache Tomcat, измените параметр" lists "в файле conf / web.xml с false на true."

  2. Называйте свою страницу не как C:/Documents and Settings/.../page.html, а как localhost:8080/your_servlet_name (название страницы лучше назвать index.html).

Таким образом, вы сможете отправлять запросы AJAX на localhost:8080/your_servlet_name/something_else.

0 голосов
/ 17 сентября 2015

Для меня это был запрос web api (c # .NET) и cors не был включен. Добавлен заголовок для cors на контроллере, и это решило проблему.

[EnableCors(origins: "*", headers: "*", methods: "*")]
0 голосов
/ 11 февраля 2014

Решение, которое работало для меня, состояло в том, что я должен был добавить "www" к URL! Я использовал URL Rewrite, поэтому для каждого URL (изображения, js, get, load, post) мне нужно было использовать полный URL, но в нем отсутствовал «www»!

...