Question

J'ai une page Web qui utilise la publication sur plusieurs pages pour publier sur une page cible différente.

Une nouvelle exigence est apparue, ce qui signifie qu'il pourrait y avoir 4 pages cibles différentes à publier aussi, en fonction des données saisies sur le client.

Est-il possible de modifier de manière dynamique la cible de publication transversale sur le client?

En regardant le code source HTML, je suppose qu'il serait possible d'utiliser jQuery pour manipuler la cible de publication sur le bouton d'envoi, mais cela me semble un peu bidouillé.

Quelles sont mes alternatives, réécrire les pages pour supprimer la publication sur plusieurs pages et rediriger les réponses en transmettant les données en session?

Était-ce utile?

La solution

Oui, vous pouvez certainement changer l’action action du formulaire. Je vais vous expliquer comment le faire.

Tout d'abord, votre formulaire doit avoir un nom et une URL d'action spécifiés dans le code HTML:

<form name="aformiam" method="post" action="/somewhere/to/go.php">

Ensuite, vous souhaiterez exécuter du code JavaScript lors de la soumission du formulaire. Vous devez donc définir la propriété onClick de votre bouton d'envoi sur une fonction, telle que:

<input type="submit" value="Send Form" onClick="return submitForm();" />

Enfin, votre fonction JavaScript permet de modifier l'action du formulaire et de l'envoyer.

function submitForm() {
  // do anything here you need to determine which URL to post to
  // I am just making an example here
  var targetURL = '/some/url/to/post.php';

  // now we will change the form's action
  document.aformiam.action = targetURL;

  // finally, submit the form by returning true
  return true;
}

Notez que dans la dernière étape où nous renvoyons true, le formulaire est soumis car le type de l'élément d'entrée est submit et la fonction est déclenchée par l'événement onClick . S'il s'agissait, par exemple, d'un élément d'entrée de type bouton , ou d'une balise a ou img , il serait alors nécessaire de déclencher l'envoi du formulaire. en utilisant quelque chose comme ce qui suit:

document.aformiam.submit();

Cette solution fonctionnera pour modifier l'action et la soumettre à une URL unique . Si vous devez publier simultanément plusieurs URL, vous devrez utiliser d'autres méthodes telles que XMLHttpRequest. Si tel est le cas, postez un commentaire l'indiquant et je vous en donnerai un exemple.

Autres conseils

Vous pouvez essayer de modifier l'attribut action de votre formulaire à l'aide de JavaScript, juste avant la soumission du formulaire.

Malheureusement, la plupart des navigateurs ne prennent pas en charge la redirection POST. Même les notes RFC :

  

RFC 1945 et RFC 2068 spécifient que le client n'est pas autorisé   pour changer la méthode sur la requête redirigée. Cependant, la plupart   les implémentations d'agent d'utilisateur existantes traitent 302 comme s'il s'agissait d'un 303   réponse, en effectuant un GET sur la valeur du champ Location indépendamment   de la méthode de requête d'origine. Les codes de statut 303 et 307 ont   été ajouté pour les serveurs qui souhaitent faire clairement savoir qui   type de réaction est attendu du client.

Donc, à mon humble avis, les choix sont limités à une modification action par JavaScript ou à une nouvelle publication de données à partir de votre serveur (votre serveur accepte les données POSTed, les analyse et effectue lui-même le POST).

Stocker des données en session (ou simplement les renvoyer sur POST), puis les re-poster à partir du client nécessite le support de JavaScript (pour soumettre automatiquement le formulaire) ou obliger l'utilisateur à cliquer sur "soumettre". bouton une fois de plus. Vous pouvez toutefois envisager d’utiliser cette méthode comme solution de secours.

Faites que action par défaut pointe vers votre script de secours. Si vous avez réussi à modifier action avant de soumettre & # 8212; tout va bien à ce stade. Si quelque chose échoue, comme dans le cas où JavaScript est désactivé & # 8212; Créez une page de sortie de script de secours avec un champ de données caché (afin qu’elle ne soit plus modifiée) et un bouton de soumission visible, affichant les données à un emplacement approprié.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top