Ответ jQuery в браузере пуст, хотя curl работает - PullRequest
4 голосов
/ 04 марта 2010

Я использую jQuery .ajax() для вызова сервера (фактически локального сервера выполнения Django) и получения ответа.

На консоли сервера я вижу, что приходит запрос JSON, он отвечает правильно, и все выглядит нормально.

Но в моем браузере (проверено на Firefox 3.6 и Safari 4.0.4, и я использую jQuery 1.4.2) кажется, что тело ответа пустое (код ответа 200, а заголовки в противном случае выглядят нормально) .

Проверяя ответ из командной строки, я получаю ожидаемый ответ.

$ curl http://127.0.0.1:8000/api/answers/answer/1 --data "text = test & user_name = testy & user_location = testyville & site = http% 3A% 2F% 2Flocalhost% 3A8888% 2Fcs% 2Fjavascript_answer_form.html & email_address ="
{"answer_permalink": "http://127.0.0.1:8000/questions/1"," answer_id ": 16," question_text ":" Каким было небо, когда ты был молодым? "," answer_text ":" test "," question_id ":" 1 " }

Я делаю запрос из файла HTML на моем локальном компьютере, который не обслуживается веб-браузером. Это просто адрес, используя file://. Сервер django также является локальным (127.0.0.1:8000, местоположение по умолчанию).

Спасибо за любые предложения!

-Джит

Ответы [ 3 ]

2 голосов
/ 05 марта 2010

Если вы не разрешите своему браузеру альтернативные настройки для локальных файлов, все остается связанным междоменной политикой безопасности. Файлы, не входящие в домен (например, localhost), не могут запрашивать файлы из этого домена.

Я не уверен, как междоменная политика работает с портами; возможно, вы сможете поместить этот файл в папку localhost, доступную для порта 80 (если она есть), и выполнить свою работу. В противном случае вы застряли, если вы не можете изменить настройки браузера, чтобы сделать исключения (и даже тогда я не уверен, что это выполнимо в любых стандартных браузерах).

1 голос
/ 05 марта 2010

Измените 'complete' на 'success' в вашем вызове .ajax (). 'complete' используется для оповещения о завершении операции ajax, но не предоставляет данные ответа. 'success' вызывается с успешным запросом и получает ответ. «error» является аналогом «success», используемым для обработки ошибок.

Я думаю, что браузеры (по крайней мере, некоторые для меня, например Safari) рассматривают файлы, обслуживаемые файловой системой, как надежные источники с точки зрения политики одного и того же происхождения. Так что здесь оказалась красная сельдь.

1 голос
/ 05 марта 2010

Добавьте «error: function (data) {alert (data);}», чтобы проверить, не работает ли ваш $ .ajax.

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