Tengo algunos datos que necesito convertir a formato JSON y luego PUBLICARlos con una función de 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="[email protected]" />
</form>
</body>
Así es como se ve la publicación ahora. Necesito enviar los valores en formato JSON y hacer el POST con JavaScript.
javascript
json
post
xmlhttprequest
Damjan Pavlica
fuente
fuente
{"firstName":"harry", "lastName":"tester", "toEmail":"[email protected]"}
?Respuestas:
No estoy seguro si quieres 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 }; };
fuente
"cmd":"<img src=0 onerror=alert(1)>"
no%3Cimg+src%3D0+onerror%3Dalert%281%29%3E
JSON.stringify
devolución.html form
notJSON.stringify
.Aquí hay un ejemplo usando 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 función jQuery serializeArray crea un objeto Javascript con los valores del formulario. Luego, puede usar JSON.stringify para convertir eso en una cadena, si es necesario. Y también puedes eliminar la carga de tu cuerpo.
fuente
Otro ejemplo está disponible aquí:
Enviar un JSON al servidor y recuperar un JSON a cambio, sin JQuery
Que es lo mismo que la respuesta de jans, pero también verifica la respuesta de los servidores estableciendo una devolución de llamada onreadystatechange en XMLHttpRequest.
fuente
Usando el nuevo objeto FormData (y otras cosas de ES6), puede hacer esto para convertir su formulario completo en JSON:
let data = {}; let formdata = new FormData(theform); for (let tuple of formdata.entries()) data[tuple[0]] = tuple[1];
y luego
xhr.send(JSON.stringify(data));
como en la respuesta original de Jan.fuente