J'ai une page web avec un formulaire. Lorsque l'utilisateur soumet le formulaire, je souhaite que le serveur redirige le navigateur vers une page différente de l'action du formulaire. En ce moment, je le fais en utilisant la fonction header de PHP pour envoyer un code d'état 302. Ça fonctionne bien.Formulaire qui redirige le navigateur lorsqu'il est accédé par un formulaire régulier ou par une requête Ajax - est-ce possible?
J'essaye de faire que la page sur le serveur redirige le navigateur de la même manière, indépendamment du fait qu'il a été soumis normalement (sans Javascript) ou par l'intermédiaire d'Ajax. J'ai essayé de le faire en définissant l'emplacement de la fenêtre à l'URL de l'en-tête Location. J'utilise jQuery, et de faire un appel comme celui-ci:
$.ajax({
url: this.action,
type: "POST",
data: getFormData(this),
complete: function(request) {
window.location.assign(request.getResponseHeader("Location"));
}
});
Toutefois, cela ne fonctionne pas. Après y avoir réfléchi, j'ai réalisé que ce n'était pas très surprenant. Dans une requête Ajax, le navigateur est supposé gérer de façon transparente les réponses de redirection telles que les codes 302 avant de changer le readyState. Lorsque la fonction complète s'exécute, elle recherche l'en-tête Location dans la destination finale et ne la trouve pas. En tant qu'expérience, j'ai ensuite essayé d'envoyer un code d'état 200 avec un en-tête Location. J'ai essayé la requête Ajax et ça a bien fonctionné. Cependant, quand j'ai fait la soumission non-Ajax, cela n'a pas fonctionné. Le navigateur s'est rendu sur la page d'action du formulaire et y est resté, comme s'il ignorait l'en-tête Location.
Y a-t-il un moyen de rediriger la même page dans les deux cas, sans que le serveur ait à savoir si la requête est une requête Ajax?
Dans le cas où cela importe, j'ai essayé le formulaire dans divers navigateurs (IE8, IE7, IE6, Firefox 3.5, Chrome) avec des résultats similaires à chaque fois. En outre, je fais une demande de publication pour éviter de tomber sur la limite de longueur d'URL de 2083 caractères d'IE.
Peut-être que s'il y a une erreur il n'y a pas redirect par exemple, des trucs de type de validation – rojoca
Bonne question. Le même script sur le serveur est utilisé par de nombreux formulaires sur des pages différentes, dont certaines ne sont pas bien conçues et essayent de soumettre en utilisant Ajax, sans aucune bonne raison de le faire. Cela peut être une solution de contournement temporaire jusqu'à ce que je puisse corriger ces formulaires. En outre, je suis curieux de savoir si cela peut être fait, car il peut être utile un jour. Je peux vouloir que mon site utilise Ajax pour certaines cloches et sifflets, mais fonctionne toujours pour les clients sans support Javascript. De plus, il se peut que je doive faire une requête Ajax et rester sur la même page ou rediriger, selon ce que le serveur décide. –