Então, eu recebi essa chamada do jQuery AJAX e a resposta vem do servidor na forma de um redirecionamento 302. Gostaria de pegar esse redirecionamento e carregá-lo em um iframe, mas quando tento exibir as informações do cabeçalho com um alerta javascript, ele aparece nulo, mesmo que o firebug as veja corretamente.
Aqui está o código, se ajudar:
$j.ajax({
type: 'POST',
url:'url.do',
data: formData,
complete: function(resp){
alert(resp.getAllResponseHeaders());
}
});
Eu realmente não tenho acesso ao material do lado do servidor para mover o URL para o corpo da resposta, que eu sei que seria a solução mais fácil, portanto, qualquer ajuda com a análise do cabeçalho seria fantástica.
post
extrairá o servidor original e extrairá os dados de destino e o JS de front-end solicitará esse servidor proxy para os dados de destino. Ou 2) altere o código do servidor para permitir o CORS.Respostas:
A solução do cballou funcionará se você estiver usando uma versão antiga do jquery. Nas versões mais recentes, você também pode tentar:
De acordo com a documentação, o objeto XMLHttpRequest está disponível a partir do jQuery 1.4.
fonte
Se for uma solicitação CORS , você poderá ver todos os cabeçalhos nas ferramentas de depuração (como Chrome-> Inspect Element-> Network), mas o objeto xHR recuperará apenas o cabeçalho (via
xhr.getResponseHeader('Header')
) se esse cabeçalho for um cabeçalho de resposta simples :Content-Type
Last-modified
Content-Language
Cache-Control
Expires
Pragma
Se não estiver neste conjunto, deverá estar presente no cabeçalho Access-Control-Expose-Headers retornado pelo servidor.
Sobre o caso em questão, se for uma solicitação CORS, só será possível recuperar o
Location
cabeçalho através doXMLHttpRequest
objeto se, e somente se, o cabeçalho abaixo também estiver presente:Se não for uma solicitação do CORS,
XMLHttpRequest
não haverá problemas para recuperá-la.fonte
fonte
A infeliz verdade sobre o AJAX e o redirecionamento 302 é que você não pode obter os cabeçalhos do retorno porque o navegador nunca os fornece ao XHR. Quando um navegador vê um 302, ele aplica automaticamente o redirecionamento. Nesse caso, você veria o cabeçalho no firebug porque o navegador o obteve, mas não no ajax, porque o navegador não o passou. É por isso que o sucesso e os manipuladores de erros nunca são chamados. Somente o manipulador completo é chamado.
http://www.checkupdown.com/status/E302.html
Aqui estão algumas postagens de stackoverflow sobre o assunto. Algumas das postagens descrevem hacks para contornar esse problema.
Como gerenciar uma solicitação de redirecionamento após uma chamada do jQuery Ajax
Pegando 302 FOUND em JavaScript
Redirecionamento HTTP: 301 (permanente) vs. 302 (temporário)
fonte
O objeto XMLHttpRequest subjacente usado pelo jQuery sempre segue silenciosamente os redirecionamentos, em vez de retornar um código de status 302. Portanto, você não pode usar a funcionalidade de solicitação AJAX do jQuery para obter a URL retornada. Em vez disso, você precisa colocar todos os dados em um formulário e enviá-lo com o
target
atributo definido para o valor doname
atributo do iframe:A
url.do
página do servidor será carregada no iframe, mas quando seu status 302 chegar, o iframe será redirecionado para o destino final.fonte
tente isto:
fonte
ATUALIZAÇÃO 2018 PARA O JQUERY 3 E MAIS TARDE
Sei que essa é uma pergunta antiga, mas nenhuma das soluções acima funcionou para mim. Aqui está a solução que funcionou:
fonte
+1 para PleaseStand e aqui está meu outro hack:
depois de pesquisar e constatar que a "solicitação cruzada de ajax" não pôde obter os cabeçalhos de resposta do objeto XHR, desisti. e use iframe.
fonte