Vous ne pourrez pas le faire facilement avec du javascript simple. Lorsque vous publiez un formulaire, les entrées du formulaire sont envoyées au serveur et votre page est actualisée - les données sont gérées côté serveur. Autrement dit, la submit()
fonction ne renvoie rien, elle envoie simplement les données du formulaire au serveur.
Si vous voulez vraiment obtenir la réponse en Javascript (sans rafraîchir la page), alors vous aurez besoin d'utiliser AJAX, et quand vous commencez à parler en utilisant AJAX, vous devez utiliser une bibliothèque. jQuery est de loin le plus populaire et mon préféré. Il existe un excellent plugin pour jQuery appelé Form qui fera exactement ce que vous voulez.
Voici comment vous utiliseriez jQuery et ce plugin:
$('#myForm')
.ajaxForm({
url : 'myscript.php', // or whatever
dataType : 'json',
success : function (response) {
alert("The server says: " + response);
}
})
;
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);
Une alternative Ajax consiste à définir un invisible
<iframe>
comme cible de votre formulaire et à en lire le contenu<iframe>
dans sononload
gestionnaire. Mais pourquoi s'embêter quand il y a Ajax?Remarque: je voulais juste mentionner cette alternative car certaines des réponses affirment qu'il est impossible d'y parvenir sans Ajax.
la source
<iframe>
POST (avec rappel àparent
). Pour les téléchargements et les uploads ...La méthode Javascript vanille non jQuery, extraite du commentaire de 12me21:
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 voulez envoyer "d'autres trucs" ou l'ajuster d'une manière ou d'une autre, voyez ici pour quelques détails.la source
<input type='button' onclick="submitForm(); return false;">
ou vous pourriez ajouter un écouteur d'événement pour «soumettre» un événement comme la réponse de Marcus: stackoverflow.com/a/51730069/32453Je le fais de cette façon et cela fonctionne.
la source
event.preventDefault();
(event
= premier argument de la fonction de soumission) au lieu dereturn false
. Renvoyer false n'empêchera pas simplement le navigateur de soumettre le formulaire, mais empêchera également d'autres effets secondaires qui pourraient être importants. Il y a beaucoup de question liées à ce sujet .FormData($("myform")[0])
si vous essayez un type d'entrée = téléchargement de fichier.event.target.action
et$(event.target).serialize()
au lieu de$('#form').attr('action')
et$('#form').serialize()
.Futurs chercheurs Internet:
Pour les nouveaux navigateurs (à partir de 2018: Chrome, Firefox, Safari, Opera, Edge et la plupart des navigateurs mobiles, mais pas IE),
fetch
est une API standard qui simplifie les appels réseau asynchrones (pour lesquels nous avions besoin deXMLHttpRequest
jQuery$.ajax
).Voici une forme traditionnelle:
Si un formulaire comme celui-ci vous est remis (ou que vous l'avez créé car il est sémantique html), vous pouvez envelopper le
fetch
code dans un écouteur d'événements comme ci-dessous:(Ou, si, comme l'affiche originale, vous voulez l'appeler manuellement sans événement de soumission, mettez simplement le
fetch
code là-bas et passez une référence à l'form
élément au lieu d'utiliserevent.target
.)Documents:
Récupérer: https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API
Autre: https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms/Sending_forms_through_JavaScript Cette page en 2018 ne mentionne pas (encore) fetch. Mais il mentionne que l'astuce target = "myIFrame" est obsolète. Et il a également un exemple de form.addEventListener pour l'événement 'submit'.
la source
Je ne suis pas sûr que vous compreniez ce que fait submit () ...
Lorsque vous effectuez
form1.submit();
le formulaire, les informations sont envoyées au serveur Web.Le serveur Web fera tout ce qu'il est censé faire et renverra une toute nouvelle page Web au client (généralement la même page avec quelque chose de modifié).
Donc, il n'y a aucun moyen que vous puissiez "attraper" le retour d'une action form.submit ().
la source
Il n'y a pas de rappel. C'est comme suivre un lien.
Si vous souhaitez capturer la réponse du serveur, utilisez AJAX ou publiez-la dans une Iframe et récupérez ce qui y apparaît après l'
onload()
événement de l'iframe .la source
Vous pouvez
event.preventDefault()
dans le gestionnaire de clics de votre bouton d'envoi pour vous assurer que l'submit
événement par défaut du formulaire HTML ne se déclenche pas (ce qui conduit à l'actualisation de la page).Une autre alternative serait d'utiliser un balisage de formulaire plus pirate: c'est l'utilisation de
<form>
ettype="submit"
qui le comportement souhaité ici; car ceux-ci conduisent finalement à des événements de clic actualisant la page.Si vous souhaitez toujours utiliser
<form>
, et vous ne voulez pas écrire cliquez sur Gestion personnalisée, vous pouvez utiliser jQueryajax
méthode, qui fait abstraction du problème entier loin pour vous en exposant les méthodes de promesse poursuccess
,error
etc.Pour récapituler, vous pouvez résoudre votre problème en:
• empêcher le comportement par défaut dans la fonction de gestion en utilisant
event.preventDefault()
• en utilisant des éléments qui n'ont pas de comportement par défaut (par exemple
<form>
)• en utilisant jQuery
ajax
(Je viens de remarquer que cette question date de 2008, je ne sais pas pourquoi elle est apparue dans mon flux; en tout cas, j'espère que c'est une réponse claire)
la source
Voici mon code pour ce problème:
la source
Si vous souhaitez capturer la sortie d'une requête AJAX à l'aide de Chrome, vous pouvez suivre ces étapes simples:
la source
la source
En m'appuyant sur la réponse de @rajesh_kw ( https://stackoverflow.com/a/22567796/4946681 ), je gère les erreurs et le succès des messages de formulaire:
Je fais usage de
this
pour que ma logique soit réutilisable, je m'attends à ce que le HTML soit renvoyé en cas de succès, donc je le rend et remplace la page actuelle, et dans mon cas, j'attends une redirection vers la page de connexion si la session est expirée, donc J'intercepte cette redirection afin de préserver l'état de la page.Les utilisateurs peuvent désormais se connecter via un autre onglet et réessayer de soumettre.
la source
Vous devez utiliser AJAX. L'envoi du formulaire entraîne généralement le chargement d'une nouvelle page par le navigateur.
la source
Vous pouvez le faire en utilisant la technologie javascript et AJAX. Jetez un œil à jquery et à ce plug-in de formulaire . Il vous suffit d'inclure deux fichiers js pour enregistrer un rappel pour le form.submit.
la source
Vous pouvez accomplir cela en utilisant jQuery et la
ajax()
méthode:la source
la première de toutes utiliser $ (document) .ready (function ()) dans cette utilisation ('formid'). submit (function (event)) et ensuite empêcher l'action par défaut après avoir appelé la soumission de formulaire ajax $ .ajax ({,,, ,}); il faudra le paramètre que vous pouvez choisir en fonction de vos besoins puis appeler une fonction success: function (data) {// faire ce que vous voulez mon exemple pour mettre la réponse html sur div}
la source
Tout d'abord, nous aurons besoin de serializeObject ();
Ensuite, vous faites un message de base et obtenez une réponse
la source
J'ai le code suivant exécuté parfaitement en utilisant ajax avec des données de formulaire en plusieurs parties
la source
Vous pouvez utiliser jQuery.post () et renvoyer des réponses JSON bien structurées à partir du serveur. Il vous permet également de valider / désinfecter vos données directement sur le serveur, ce qui est une bonne pratique car c'est plus sécurisé (et même plus facile) que de le faire sur le client.
Par exemple, si vous devez publier un formulaire html sur le serveur (pour saveprofilechanges.php) avec des données utilisateur pour une inscription simple:
I. Pièces client:
Partie HTML Ia:
Partie Ib Script:
II. Partie serveur (saveprofilechanges.php):
la source
vous pouvez le faire sans ajax.
écrivez 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.
la source