J'ai donc ce formulaire HTML:
<html>
<head><title>test</title></head>
<body>
<form action="myurl" method="POST" name="myForm">
<p><label for="first_name">First Name:</label>
<input type="text" name="first_name" id="fname"></p>
<p><label for="last_name">Last Name:</label>
<input type="text" name="last_name" id="lname"></p>
<input value="Submit" type="submit" onclick="submitform()">
</form>
</body>
</html>
Quel serait le moyen le plus simple d'envoyer les données de ce formulaire sous forme d'objet JSON à mon serveur lorsqu'un utilisateur clique sur soumettre?
UPDATE: Je suis allé aussi loin que cela, mais cela ne semble pas fonctionner:
<script type="text/javascript">
function submitform(){
alert("Sending Json");
var xhr = new XMLHttpRequest();
xhr.open(form.method, form.action, true);
xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
var j = {
"first_name":"binchen",
"last_name":"heris",
};
xhr.send(JSON.stringify(j));
Qu'est-ce que je fais mal?
Obtenir des données de formulaire complètes sous forme de tableau et JSON le stringifier.
var formData = JSON.stringify($("#myForm").serializeArray());
Vous pouvez l'utiliser plus tard en ajax. Ou si vous n'utilisez pas ajax; mettez-le dans la zone de texte cachée et transmettez-le au serveur. Si ces données sont transmises sous forme de chaîne json via des données de forme normales, vous devez les décoder à l'aide de json_decode . Vous obtiendrez alors toutes les données d'un tableau.
$.ajax({
type: "POST",
url: "serverUrl",
data: formData,
success: function(){},
dataType: "json",
contentType : "application/json"
});
HTML ne fournit aucun moyen de générer du JSON à partir de données de formulaire.
Si vous voulez vraiment le gérer depuis le client, vous devrez alors utiliser JavaScript pour:
Vous feriez probablement mieux de vous en tenir aux données application/x-www-form-urlencoded
et de les traiter sur le serveur au lieu de JSON. Votre formulaire n'a pas de hiérarchie compliquée qui tirerait profit d'une structure de données JSON.
Mise à jour en réponse à une réécriture majeure de la question…
readystatechange
, vous ne faites donc rien avec la réponsevotre code est correct mais jamais exécuté, cause du bouton de soumission [type = "submit"] il suffit de le remplacer par type = button
<input value="Submit" type="button" onclick="submitform()">
dans votre script; formulaire n'est pas déclaré.
let form = document.forms[0];
xhr.open(form.method, form.action, true);