web-dev-qa-db-fra.com

Attraper 302 TROUVE en JavaScript

J'utilise jQuery pour faire une requête AJAX POST à mon serveur, qui peut renvoyer une réponse HTTP avec le statut 302. Ensuite, JavaScript envoie simplement une requête GET à cette URL, alors que je voudrais rediriger l'utilisateur vers l'URL dans cette réponse. Est-ce possible?

35
Alexander Solovyov

La réponse acceptée ne fonctionne pas pour les raisons données. J'ai posté un commentaire avec un lien vers une question qui décrivait un hack pour contourner le problème du 302 géré de manière transparente par le navigateur:

Comment gérer une demande de redirection après un appel jQuery Ajax

Cependant, c'est un peu un hack sale et après avoir beaucoup fouillé, j'ai trouvé ce que je pense être une meilleure solution - utilisez JSON . Dans ce cas, vous pouvez faire en sorte que toutes les réponses aux requêtes ajax aient le code 200 et, dans le corps de la réponse, vous ajoutez une sorte d'objet JSON que votre gestionnaire de réponses ajax peut ensuite utiliser de la manière appropriée.

22
Steg

Je ne pense pas. W3C indique que les redirections HTTP avec certains codes d'état, y compris 302, doivent être suivies de manière transparente. Cité ci-dessous:

Si la réponse est une redirection HTTP (code d'état 301, 302, 303 ou 307), alors elle DOIT être suivie de manière transparente (sauf si elle viole la sécurité ou les précautions de boucle infinie). Toute autre erreur (y compris un 401) DOIT obliger l'objet à utiliser cette page d'erreur comme réponse.

À titre expérimental, j'ai essayé de faire des demandes Ajax à partir de divers navigateurs (Firefox 3.5, Chrome, IE8, IE7, IE6) vers un serveur donnant un code d'état 302 et montrant l'état dans l'objet de demande du navigateur. Dans tous les cas, il s'est affiché à 200.

6
Elias Zamaria

Dans mon problème, la raison était:

j'utilisais localhost/Home/Test addres pour tester la page. Mais ajax demande le code en utilisant 127.0.0.1/Home/AjaxRequest pour le paramètre url. Lorsque les URL sont différentes, cette erreur se produit.

ça aide peut-être quelqu'un :)

2
Orhaan