การส่งคืนการเปลี่ยนเส้นทางเป็นการตอบกลับคำขอ XHR


คำตอบ:


216

จะเกิดอะไรขึ้นหากเบราว์เซอร์ได้รับการตอบกลับการเปลี่ยนเส้นทางไปยังคำขอ ajax

หากเซิร์ฟเวอร์ส่งการเปลี่ยนเส้นทาง (หรือการตอบสนอง 302 บวกกับส่วนหัว Location:) การเปลี่ยนเส้นทางจะถูกตามด้วยเบราว์เซอร์โดยอัตโนมัติ การตอบสนองต่อคำขอที่สอง (สมมติว่าไม่ใช่การเปลี่ยนเส้นทางอื่น) คือสิ่งที่โปรแกรมของคุณเปิดเผย

ที่จริงแล้วคุณไม่มีความสามารถในการตรวจสอบว่ามีการตอบสนอง 302 ครั้งหรือไม่ หากการเปลี่ยนเส้นทาง 302 นำไปสู่ ​​200 โปรแกรมของคุณจะทำงานเหมือนกันกับคำขอต้นฉบับที่นำไปสู่ ​​200 โดยตรง

นี้ได้รับทั้งประสบการณ์และฉันพฤติกรรมที่เรียกว่าออกมาในสเปค

อัปเดตปี 2559:เวลาผ่านไปแล้วและข่าวดีก็คือข้อมูลจำเพาะการดึงข้อมูลใหม่() APIจะให้การควบคุมที่ละเอียดยิ่งขึ้นเกี่ยวกับวิธีจัดการการเปลี่ยนเส้นทางโดยมีพฤติกรรมเริ่มต้นคล้ายกับ XHR ที่กล่าวว่ามันจะทำงานเฉพาะที่สามารถดึงข้อมูล () จะดำเนินการโดยกำเนิด รุ่น Polyfill ของสามารถดึงข้อมูล () -which จะขึ้นอยู่กับ XHR- ยังคงมีข้อ จำกัด ของ XHR โชคดีที่การสนับสนุนเบราว์เซอร์แบบดั้งเดิมดูเหมือนจะเป็นการปัดเศษอย่างดี


47
น่าสนใจฉันมาถึงที่นี่เพราะฉันกำลังประสบกับสถานการณ์ที่ไม่ได้ติดตามการเปลี่ยนเส้นทาง ... สิ่งนี้เกิดขึ้นเมื่อการเปลี่ยนเส้นทางละเมิดนโยบายกำเนิดเดียวกัน
กัส

4
@Gus ซึ่งอาจเป็นเหตุผล
Dmitry

1
ในกรณีของการเปลี่ยนเส้นทางไปสู่ ​​401 (หรือข้อผิดพลาด 4xx หรือ 5xx) ฉันคิดว่าโปรแกรมของคุณจะทำตัวราวกับว่าคำขอนำไปสู่ ​​401 โดยตรงนั่นไม่ใช่สิ่งที่คุณเห็นหรือไม่?
greim

2
RESTful API อาจส่ง 201 และส่วนหัวสถานที่ตั้งหลังจากคำขอ POST ดูrestapitutorial.com/lessons/httpmethods.html

1
อัปเดต 2019: การดึงข้อมูลไม่ทำงานอย่างที่เราคาดหวังเมื่อ 3 ปีที่แล้ว):
lcjury

7

ajax-requestจะเป็นไปตามที่เปลี่ยนเส้นทาง AFAIK เนื้อหาจริง ( .responseText, .responseXML) จะเป็นเนื้อหาจากหน้าเว็บที่คุณเปลี่ยนเส้นทางไป

คุณอาจขัดขวางการเปลี่ยนเส้นทาง ( status-code, location-header) ในวันที่readyState2 หรือ 3 แต่ไม่แน่ใจ


ไม่ทุกรัฐเหล่านั้นมีสถานะเดียวกันแน่นอน แม้แต่ค่าของgetAllResponseHeaders()เท่ากัน
sebastianwagner
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.