Mam pewne dane, które muszę przekonwertować na format JSON, a następnie POST z funkcją 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>
Tak wygląda teraz post. Potrzebuję, aby przesłać wartości w formacie JSON i wykonać POST z JavaScript.
javascript
json
post
xmlhttprequest
Damjan Pavlica
źródło
źródło
{"firstName":"harry", "lastName":"tester", "toEmail":"[email protected]"}
?Odpowiedzi:
Nie jestem pewien, czy chcesz mieć 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 }; };
źródło
"cmd":"<img src=0 onerror=alert(1)>"
nie%3Cimg+src%3D0+onerror%3Dalert%281%29%3E
JSON.stringify
zwraca.html form
notJSON.stringify
.Oto przykład użycia 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>
Funkcja jQuery serializeArray tworzy obiekt Javascript z wartościami formularza. Następnie możesz użyć JSON.stringify, aby w razie potrzeby przekonwertować to na ciąg. Możesz też odciążyć swoje ciało.
źródło
Inny przykład jest dostępny tutaj:
Wysyłanie JSON do serwera i pobieranie w zamian JSON, bez JQuery
To jest to samo, co odpowiedź jans, ale sprawdza również odpowiedź serwera, ustawiając wywołanie zwrotne onreadystatechange w XMLHttpRequest.
źródło
Używając nowego obiektu FormData (i innych rzeczy ES6), możesz to zrobić, aby przekształcić cały formularz w JSON:
let data = {}; let formdata = new FormData(theform); for (let tuple of formdata.entries()) data[tuple[0]] = tuple[1];
a potem tak
xhr.send(JSON.stringify(data));
jak w oryginalnej odpowiedzi Jana.źródło