web-dev-qa-db-fra.com

Renvoi de la redirection en réponse à la demande XHR

Que se passe-t-il si le navigateur reçoit une réponse de redirection à une demande ajax?

137
Vasil

Que se passe-t-il si le navigateur reçoit une réponse de redirection à une requête ajax?

Si le serveur envoie une redirection (à savoir une réponse 302 plus un en-tête Location:), la redirection est automatiquement suivie par le navigateur. La réponse à la demande seconde (en supposant qu'il ne s'agisse pas non plus d'une autre redirection) correspond à ce qui est exposé à votre programme.

En fait, vous ne pouvez pas détecter si une réponse 302 a eu lieu. Si la redirection 302 mène à un 200, votre programme agit alors de la même manière que si la demande initiale aboutissait directement à un 200.

Cela a été à la fois mon expérience et le comportement indiqué dans la spécification .

Mise à jour 2016: Le temps a passé et la bonne nouvelle est que la nouvelle (fetch () API) est spécifiée pour offrir contrôle plus fin du traitement des redirections , avec un comportement par défaut similaire à XHR. Cela dit, cela ne fonctionne que là où fetch () est implémenté en natif. Les versions Polyfill de fetch () - qui sont basées sur XHR -- continuent à avoir les limitations de XHR . Heureusement, support du navigateur natif semble bien se terminer.

199
greim

Le ajax-request suivra cette redirection autant que je sache. Le contenu réel (.responseText, .responseXML) sera le contenu de la page vers laquelle vous êtes redirigé.

Vous pourrez peut-être intercepter la redirection (status-code, location-header) sur readyState 2 ou 3, mais vous n'en êtes pas sûr.

7
jishi