91 votes

Données POST au format JSON

J'ai des données que je dois convertir au format JSON, puis les envoyer avec une fonction JavaScript.

<body onload="javascript:document.myform.submit()">
<form action="https://www.test.net/Services/RegistrationService.svc/InviteNewContact" method="post" name="myform">
  <input name="firstName" value="harry" />
  <input name="lastName" value="tester" />
  <input name="toEmail" value="testtest@test.com" />
</form>
</body>

C'est ainsi que le poste se présente maintenant. Je dois soumettre les valeurs au format JSON et effectuer le POST avec JavaScript.

178voto

Jan Kuča Points 4393

Je ne sais pas si vous voulez jQuery.

var form;

form.onsubmit = function (e) {
  // stop the regular form submission
  e.preventDefault();

  // collect the form data while iterating over the inputs
  var data = {};
  for (var i = 0, ii = form.length; i < ii; ++i) {
    var input = form[i];
    if (input.name) {
      data[input.name] = input.value;
    }
  }

  // construct an HTTP request
  var xhr = new XMLHttpRequest();
  xhr.open(form.method, form.action, true);
  xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');

  // send the collected data as JSON
  xhr.send(JSON.stringify(data));

  xhr.onloadend = function () {
    // done
  };
};

29voto

Josh Stodola Points 42410

Voici un exemple utilisant jQuery ...

 <head>
   <title>Test</title>
   <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
   <script type="text/javascript" src="http://www.json.org/json2.js"></script>
   <script type="text/javascript">
     $(function() {
       var frm = $(document.myform);
       var dat = JSON.stringify(frm.serializeArray());

       alert("I am about to POST this:\n\n" + dat);

       $.post(
         frm.attr("action"),
         dat,
         function(data) {
           alert("Response: " + data);
         }
       );
     });
   </script>
</head>

Le jQuery serializeArray crée un objet Javascript avec les valeurs du formulaire. Vous pouvez alors utiliser JSON.stringify pour le convertir en chaîne de caractères, si nécessaire. Et vous pouvez aussi retirer votre corps en charge.

3voto

Felk Points 4110

En utilisant le nouveau Données du formulaire (et d'autres éléments ES6), vous pouvez faire cela pour transformer votre formulaire entier en JSON :

let data = {};
let formdata = new FormData(theform);
for (let tuple of formdata.entries()) data[tuple[0]] = tuple[1];

et puis juste xhr.send(JSON.stringify(data)); comme dans la réponse originale de Jan.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X