Comment faire pour capturer la réponse de la forme.soumettre
J'ai le code suivant:
<script type="text/javascript">
function SubmitForm()
{
form1.submit();
}
function ShowResponse()
{
}
</script>
.
.
.
<div>
<a href="#" onclick="SubmitForm();">Click</a>
</div>
Je veux capturer la réponse html de form1.submit
? Comment dois-je faire? Puis-je enregistrer une fonction de rappel à form1.méthode submit?
Vous devez vous connecter pour publier un commentaire.
Vous ne serez pas en mesure de le faire facilement avec du javascript. Lorsque vous validez un formulaire, les entrées d'un formulaire sont envoyées au serveur et votre page est actualisée - les données sont traitées sur le côté serveur. Qui est, le
submit()
fonction ne retourne rien, il se contente d'envoyer les données du formulaire au serveur.Si tu voulais vraiment obtenir la réponse en Javascript (sans actualisation), puis vous aurez besoin d'utiliser AJAX, et quand vous commencez à parler à l'aide d'AJAX, vous aurez besoin à utiliser une bibliothèque. jQuery est de loin le plus populaire, et mon favori personnel. Il y a un plugin pour jQuery appelé Formulaire qui fera exactement ce qu'il sonne comme vous le souhaitez.
Voici comment vous pouvez utiliser jQuery et du plugin:
var xhr = new XMLHttpRequest() xhr.open("POST", "myscript.php"); xhr.onload=function(event){ alert("The server says: " + event.target.response); }; var formData = new FormData(document.getElementById("myForm")); xhr.send(formData);
Ajax solution consiste à définir un invisible
<iframe>
que votre formulaire de cible et de lire le contenu de ce<iframe>
dans sononload
gestionnaire. Mais pourquoi s'embêter quand il y a Ajax?Remarque: je voulais juste parler de cette alternative depuis quelques réponses prétendent que c'est impossible d'atteindre cet objectif sans Ajax.
<iframe>
Postes (avec rappel àparent
). Pour les téléchargements et uploads ressemblent...Je le fais de cette façon et à son fonctionnement.
event.preventDefault();
(event
= premier argument de la fonction envoyer) au lieu dereturn false
. Retour faux ne sera pas tout simplement arrêter le navigateur de la soumission du formulaire, mais aussi arrêter d'autres effets secondaires de passe qui pourrait être importante. Il sont beaucoup de questions lié pour cette.FormData($("myform")[0])
si vous tentez d'effectuer une input type=téléchargement de fichiers.event.target.action
et$(event.target).serialize()
au lieu de$('#form').attr('action')
et$('#form').serialize()
.La non-jQuery façon, extrait de 12me21 commentaire:
Pour
POST
's le type de contenu par défaut est "application/x-www-form-urlencoded", qui correspond à ce que nous envoyons dans l'extrait ci-dessus. Si vous souhaitez envoyer des "autres trucs" ou le personnaliser en quelque sorte de voir ici pour certains détails concrets.Je ne suis pas sûr que vous comprenez ce que submit() ne...
Lorsque vous ne
form1.submit();
la forme de l'information est envoyée au serveur web.Le Serveur web va faire ce que son supposé faire et de renvoyer une image de marque nouvelle page web pour le client(généralement la même page avec quelque chose de différent).
Donc, il n'y a aucun moyen que vous pouvez "attraper" le retour d'un formulaire.submit() de l'action.
Internet du futur, les chercheurs:
Pour les nouveaux navigateurs (à compter de 2018: Chrome, Firefox, Safari, Opera, Edge, et la plupart des navigateurs mobiles, mais pas IE),
fetch
est une API standard qui simplifie asynchrone appels réseau (pour lequel nous avons utilisé à besoinXMLHttpRequest
ou jQuery$.ajax
).Ici est une forme traditionnelle:
Si une forme comme ci-dessus est remis à vous (ou que vous avez créé parce qu'il est de la sémantique html), vous pouvez enrouler le
fetch
code dans un écouteur d'événement comme ci-dessous:(Ou, si comme l'original de l'affiche que vous voulez l'appeler manuellement sans présenter des cas, il suffit de mettre le
fetch
code et passer une référence à laform
élément au lieu d'utiliserevent.target
.)Docs:
Fetch:
https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API
Autres:
https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms/Sending_forms_through_JavaScript
Cette page, en 2018, ne fait pas mention de fetch (encore).
Mais il mentionne que le target="myIFrame" astuce est obsolète.
Et il a aussi un exemple de formulaire.la méthode addEventListener pour "soumettre" de l'événement.
Il n'y a pas de rappel. C'est comme suivant un lien.
Si vous voulez capturer la réponse du serveur, utiliser AJAX ou l'envoyer à un Iframe et de saisir ce qui y apparaît après l'iframe est
onload()
événement.Vous pouvez
event.preventDefault()
dans le gestionnaire de clic de votre bouton soumettre pour s'assurer que le formulaire HTML par défautsubmit
événement n'a pas le feu (qui est ce qui conduit à la page d'actualisation).Une autre alternative serait d'utiliser hackier formulaire de balisage: C'est l'utilisation de
<form>
ettype="submit"
que c'est la façon de le comportement souhaité ici; car ces en fin de compte conduire à cliquez sur les événements de l'actualisation de la page.Si vous souhaitez toujours utiliser
<form>
, et vous ne voulez pas écrire personnalisé des gestionnaires de clic, vous pouvez utiliser du jQueryajax
méthode, qui fait abstraction de l'ensemble du problème par vous par l'exposition de la promesse méthodes poursuccess
,error
, etc.Pour résumer, vous pouvez résoudre votre problème en soit:
• de la prévention des comportements par défaut de la fonction de traitement par l'utilisation de
event.preventDefault()
• en utilisant des éléments qui n'ont pas le comportement par défaut (par exemple,
<form>
)• à l'aide de jQuery
ajax
(je viens de remarquer que cette question est à partir de 2008, ne sais pas pourquoi il est apparu dans mon alimentation; en tout cas, j'espère que c'est une réponse claire)
C'est mon code pour ce problème:
Dans le cas où vous souhaitez récupérer la sortie d'une requête AJAX à l'aide de Chrome, vous pouvez suivre ces étapes simples:
Bâtiment sur la réponse de @rajesh_kw (https://stackoverflow.com/a/22567796/4946681), je m'occupe de post de formulaire d'erreurs et de succès:
- Je faire usage de
this
de sorte que ma logique est réutilisable, j'attends que le HTML soit de retour sur une réussite, donc je l'ai rendu et remplacer la page actuelle, et dans mon cas, je m'attends à une redirection vers la page de connexion si la session est expirée, j'ai donc intercepter une redirection dans le but de préserver l'état de la page.Maintenant, les utilisateurs peuvent se connecter via un autre onglet et essayer de leur soumettre de nouveau.
Vous devez être en utilisant AJAX. La soumission du formulaire est généralement le résultat dans le navigateur de charger une nouvelle page.
Vous pouvez le faire à l'aide de javascript et AJAX technologie. Jetez un oeil à jquery et à ce bouchon de forme. Vous avez seulement besoin d'inclure deux fichiers js pour enregistrer un rappel pour la forme.soumettre.
Vous pouvez accomplir cela en utilisant jQuery et la
ajax()
méthode:JS:
firrst de tous les utiliser $(document).ready(function()) à l'intérieur de cette utilisation ("formid').submit(function(event))
et puis d'empêcher action par défaut aftyer que l'appel ajax formulaire de soumission
$.ajax({, , , , });
il faudra du paramètre u peut choisir en fonction de vos besoins
appelez ensuite afunction success:function(data){
//faire ce que vous voulez de mon exemple pour mettre de la réponse html sur les div }
Tout d'abord, nous aurons besoin de serializeObject();
puis vous faites une base post et get réponse
J'ai code Suivant perfactly exécuter à l'aide d'ajax avec multi-partie des données de formulaire
Vous pouvez utiliser jQuery.post() et retour joliment structuré JSON réponses du serveur. Il vous permet également de valider/désinfecter vos données directement sur le serveur, ce qui est une bonne pratique parce que c'est plus sécurisé (et même plus facile) que de le faire sur ce client.
Par exemple, si vous avez besoin de poster formulaire html au serveur (à saveprofilechanges.php) avec les données de l'utilisateur pour la simple inscription:
I. Client de pièces:
I. une. Partie HTML:
I. b. Partie de Script:
II. La partie serveur (saveprofilechanges.php):
vous pouvez le faire sans ajax.
écrire votre comme ci-dessous.
..
..
..
puis dans "action.php"
puis après frmLogin.submit();
lire la variable $submit_return..
$submit_return contient la valeur de retour.
bonne chance.