Jadi saya mendapat panggilan jQuery AJAX ini, dan respons datang dari server dalam bentuk 302 redirect. Saya ingin mengambil pengalihan ini dan memuatnya dalam iframe, tetapi ketika saya mencoba untuk melihat info header dengan peringatan javascript, muncul nol, meskipun firebug melihatnya dengan benar.
Ini kodenya, jika itu akan membantu:
$j.ajax({
type: 'POST',
url:'url.do',
data: formData,
complete: function(resp){
alert(resp.getAllResponseHeaders());
}
});
Saya tidak benar-benar memiliki akses ke hal-hal di sisi server untuk memindahkan URL ke badan respons, yang saya tahu akan menjadi solusi termudah, jadi setiap bantuan dengan penguraian header akan menjadi fantastis.
post
menjadi server asli dan mengekstrak data target dan JS front-end akan meminta server proxy ini untuk data target. Atau, 2) mengubah kode server untuk memungkinkan CORS.Jawaban:
solusi cballou akan bekerja jika Anda menggunakan versi jquery lama. Di versi yang lebih baru Anda juga dapat mencoba:
Menurut dokumen objek XMLHttpRequest tersedia pada jQuery 1.4.
sumber
Jika ini adalah permintaan CORS , Anda mungkin melihat semua tajuk di alat debug (seperti Chrome-> Inspect Element-> Network), tetapi objek xHR hanya akan mengambil tajuk (via
xhr.getResponseHeader('Header')
) jika tajuk tersebut adalah tajuk respons sederhana :Content-Type
Last-modified
Content-Language
Cache-Control
Expires
Pragma
Jika tidak di set ini, itu harus hadir di Access-Control-Expose-Header header dikembalikan oleh server.
Tentang kasus yang dimaksud, jika itu adalah permintaan CORS, seseorang hanya akan dapat mengambil
Location
header melaluiXMLHttpRequest
objek jika, dan hanya jika, header di bawah ini juga ada:Jika ini bukan permintaan CORS,
XMLHttpRequest
akan ada masalah mengambilnya.sumber
sumber
Kebenaran yang disayangkan tentang AJAX dan 302 redirect adalah bahwa Anda tidak bisa mendapatkan header dari pengembalian karena browser tidak pernah memberikannya kepada XHR. Ketika browser melihat 302 secara otomatis berlaku pengalihan. Dalam hal ini, Anda akan melihat header di firebug karena browser mendapatkannya, tetapi Anda tidak akan melihatnya di ajax, karena browser tidak melewatinya. Inilah sebabnya mengapa keberhasilan dan penangan kesalahan tidak pernah dipanggil. Hanya penangan lengkap yang dipanggil.
http://www.checkupdown.com/status/E302.html
Berikut adalah beberapa posting stackoverflow tentang masalah ini. Beberapa pos menggambarkan retasan untuk mengatasi masalah ini.
Cara mengelola permintaan redirect setelah panggilan jQuery Ajax
Menangkap 302 DITEMUKAN dalam JavaScript
Pengalihan HTTP: 301 (permanen) vs. 302 (sementara)
sumber
Objek XMLHttpRequest yang digunakan oleh jQuery akan selalu mengikuti arahan ulang tanpa mengembalikan kode status 302. Oleh karena itu, Anda tidak dapat menggunakan fungsionalitas permintaan AJAX jQuery untuk mendapatkan URL yang dikembalikan. Sebagai gantinya, Anda perlu memasukkan semua data ke dalam formulir dan mengirimkan formulir dengan
target
atribut disetel ke nilainame
atribut iframe:Halaman server
url.do
akan dimuat di iframe, tetapi ketika 302 statusnya tiba, iframe akan dialihkan ke tujuan akhir.sumber
coba ini:
sumber
PEMBARUAN 2018 UNTUK JQUERY 3 DAN KEMUDIAN
Saya tahu ini adalah pertanyaan lama tetapi tidak ada solusi di atas yang berfungsi untuk saya. Inilah solusi yang berhasil:
sumber
+1 ke PleaseStand dan ini adalah retasan saya yang lain:
setelah mencari dan menemukan bahwa "permintaan cross ajax" tidak bisa mendapatkan header respons dari objek XHR, saya menyerah. dan gunakan iframe sebagai gantinya.
sumber