Итак, у меня есть этот вызов jQuery AJAX, и ответ приходит с сервера в виде перенаправления 302. Я хотел бы взять это перенаправление и загрузить его в iframe, но когда я пытаюсь просмотреть информацию заголовка с предупреждением javascript, он приходит в ноль, даже если firebug видит это правильно.
Вот код, если он поможет:
$j.ajax({
type: 'POST',
url:'url.do',
data: formData,
complete: function(resp){
alert(resp.getAllResponseHeaders());
}
});
На самом деле у меня нет доступа к материалам на стороне сервера, чтобы переместить URL-адрес в тело ответа, что, как я знаю, было бы самым простым решением, поэтому любая помощь в разборе заголовка была бы фантастической.
post
исходным сервером и извлекать целевые данные, и интерфейсный JS запросит у этого прокси-сервера целевые данные. Или 2) измените код сервера, чтобы разрешить CORS.Ответы:
Решение cballou будет работать, если вы используете старую версию jquery. В новых версиях вы также можете попробовать:
Согласно документации, объект XMLHttpRequest доступен с версии jQuery 1.4.
источник
Если это запрос CORS , вы можете увидеть все заголовки в инструментах отладки (таких как Chrome-> Inspect Element-> Network), но объект xHR будет извлекать заголовок (через
xhr.getResponseHeader('Header')
), только если такой заголовок является простым заголовком ответа :Content-Type
Last-modified
Content-Language
Cache-Control
Expires
Pragma
Если его нет в этом наборе, он должен присутствовать в заголовке Access-Control-Expose-Headers, возвращаемом сервером.
Что касается рассматриваемого случая, то, если это запрос CORS, можно будет извлечь
Location
заголовок только черезXMLHttpRequest
объект, если и только если также присутствует указанный ниже заголовок:Если это не запрос CORS, не
XMLHttpRequest
будет проблем с его получением.источник
источник
К сожалению, правда об AJAX и перенаправлении 302 состоит в том, что вы не можете получить заголовки из возврата, потому что браузер никогда не передает их XHR. Когда браузер видит 302, он автоматически применяет перенаправление. В этом случае вы увидите заголовок в firebug, потому что браузер получил его, но вы не увидите его в ajax, потому что браузер не пропустил его. Вот почему обработчики ошибок и ошибок никогда не вызываются. Только полный обработчик называется.
http://www.checkupdown.com/status/E302.html
Вот несколько сообщений на эту тему. Некоторые из постов описывают хаки, чтобы обойти эту проблему.
Как управлять запросом на перенаправление после вызова jQuery Ajax
Поймать 302 НАЙДЕН в JavaScript
HTTP перенаправление: 301 (постоянный) против 302 (временный)
источник
Базовый объект XMLHttpRequest, используемый jQuery , всегда будет молча следовать перенаправлениям, а не возвращать код состояния 302. Следовательно, вы не можете использовать функциональность AJAX-запроса jQuery для получения возвращенного URL-адреса. Вместо этого вам нужно поместить все данные в форму и отправить форму с
target
атрибутом, установленным в значениеname
атрибута iframe:Страница сервера
url.do
будет загружена в iframe, но когда придет его статус 302, iframe будет перенаправлен в конечный пункт назначения.источник
попробуй это:
источник
ОБНОВЛЕНИЕ 2018 ДЛЯ JQUERY 3 И ПОЗЖЕ
Я знаю, что это старый вопрос, но ни одно из вышеперечисленных решений не помогло мне. Вот решение, которое сработало:
источник
+1 в PleaseStand, и вот мой другой взломать:
После поиска и выяснения, что «перекрестный запрос ajax» не может получить заголовки ответа от объекта XHR, я сдался. и используйте вместо этого iframe.
источник