2009-08-10 10 views
73

J'ai certaines données dont j'ai besoin pour convertir au format JSON, puis POST avec une fonction JavaScript.Données POST au format JSON

<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="[email protected]" /> 
</form> 
</body> 

C'est ainsi que l'article semble maintenant. J'en ai besoin soumettre les valeurs au format JSON et faire le POST avec JavaScript.

+0

Quelle structure devraient avoir les données JSON? Juste '{" firstName ":" harry "," lastName ":" testeur "," toEmail ":" [email protected] "}'? – Gumbo

+1

Oui, les données seraient dans le format que vous avez décrit! merci pour les réponses! –

Répondre

29

Voici un exemple d'utilisation 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> 

La fonction jQuery serializeArray crée un objet Javascript avec les valeurs du formulaire. Ensuite, vous pouvez utiliser JSON.stringify pour convertir cela en une chaîne, si nécessaire. Et vous pouvez également retirer votre corps.

+8

Cela ne va pas soumettre les données au format JSON. –

+0

En fait, la fonction sérialiser convertit les données de formulaire en un objet JSON. –

+2

Josh, l'exemple sur jQuery montre le contraire: ressemble plus à une chaîne de requête standard qu'à JSON. – Sampson

125

Vous ne savez pas si vous voulez utiliser 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 
    }; 
}; 
+43

Je pense que c'est un exemple bon, propre et concis de la façon de faire le travail dans 20 lignes de code, sans 100K de cadre. – spidee

+1

@IanKuca Merci :) Je me demandais si nous pouvons envoyer les données json sans urlencode les données? Je veux dire que je veux envoyer des données comme '' cmd '': "" 'pas'% 3Cimg + src% 3D0 + onerror% 3Dalert% 281% 29% 3E' – liweijian

+1

@liweijian Vous devriez aller avec ce que renvoie 'JSON.stringify' . –

0

Utilisation du nouvel objet FormData (et quelques autres trucs ES6), vous pouvez le faire pour transformer votre forme entière 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 janvier

Questions connexes