2011-01-07 2 views
3

У меня есть приложение Rails, которое широко использует ajax. С jQuery. Например, одна из моделей полностью управляется с помощью jQuery: записи создаются, обновляются и удаляются ajaxly. Evertything отлично работает, кроме обновления записей.не вызывает обратных вызовов в Firefox после запроса ajax с jquery с перенаправлением 302

Я сделал некоторые испытания и что я понял, что JQuery в Firefox (3.6 на Mac, 3,5 на Windows, является то, что я проверял) есть проблемы с обнаружением ответа сервера, когда это 302 перенаправлен на тот же URL. Что я получаю в Firebug является:

POST локальный: 3000/ресурсы/1 -> 302 Найдено

GET локальный: 3000/ресурсы/1 -> 200 OK

И нет JQuery-х Вызывается обратный вызов ajax. Ни успеха, ни полного, ни ошибок. Но когда я создаю запись и сервер перенаправляет на другой адрес "успех" обратного вызова вызывается:

POST локальный: 3000/ресурсы -> 302 Найдено

GET локальный: 3000/ресурсы/1 -> 200 OK

Не имеет значения, могу ли я сам вызвать $ .ajax или использовать jQuery.form ajaxForm().

Любые идеи?

+0

AJAX и перенаправления очень сложны, чтобы работать вместе. Браузеры отличаются, и квитирование может быть виновато. Самое простое решение - устранить эту перенаправление, потому что в AJAX не так много смысла делать «POST-redirect-GET». – kijin

+0

Как и kijin, попробуйте добавить кеш: false в настройку AJAX. Посмотрите, работает ли это. – Anders

+0

@ Аnders, спасибо, но это не сработало :(устранение перенаправления, по-видимому, является лучшим решением до сих пор – edziubudzik

ответ

1

Перенаправление 301/302/303 выполняется обработчиком XmlHttpRequest браузеров, а не jQuery. Это не объясняет, почему у вас нет обратного вызова. Но это может объяснить, почему перенаправление не проверено на стороне ajax.

Одна из проблем заключается в том, что некоторые браузеры следуют за 302 и, например, не перенаправляют 301 или 303. В старом приложении мы использовали 303-другой код ответа и обрабатывали его в обработчике ошибок. Это было приятно, поскольку мы могли сделать новый запрос GET вместо браузера (который был глючит и должен был это сделать).

Но у нас были проблемы, в зависимости от браузеров (я думаю, не уверен).

Когда я вижу поведение ответа 302 у вас есть, я думаю, вы должны сделать то, что мы сделали: удалить перенаправление после обработки сообщений для запросов ajax. Отправьте в ответ либо конечный HTML-код, который вы хотите (который будет перенаправлять на стороне сервера), либо создайте собственный протокол (на основе JSON?), В котором вы отправляете статус протокола в json-ключ, и, возможно, новый URL-адрес для проверки для нового ответа в другом ключе и т. д.

+0

Поиск по SO приводит к тем же результатам: http: //stackoverflow.com/questions/199099/how-to-manage-a-redirect-request-after-a-jquery-ajax-call/1534662#1534662 – regilero

+0

Я знаю про XmlHttpRequest, но jQuery обертывает его так, чтобы он мог быть важный фактор. Я думаю, что я собираюсь удалить перенаправление, или позвоню приспешнику. Спасибо! – edziubudzik

+0

, так что, скорее всего, ответьте или ответьте. – regilero

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

  • Нет связанных вопросов^_^