Mam więc ten formularz 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>
Jaki byłby najłatwiejszy sposób na przesłanie danych tego formularza jako obiektu JSON na mój serwer, gdy użytkownik kliknie przycisk Prześlij?
AKTUALIZACJA: posunąłem się aż do tego, ale wydaje się, że nie działa:
<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));
Co ja robię źle?
$.ajax
iserialize
w nim.Odpowiedzi:
Uzyskaj pełne dane formularza jako tablicę i json zdefiniuj je.
Możesz go później użyć w Ajax. Lub jeśli nie używasz Ajax; umieść go w ukrytym obszarze tekstowym i przekaż do serwera. Jeśli te dane są przekazywane jako ciąg json za pośrednictwem normalnych danych formularza, musisz je zdekodować za pomocą json_decode . Otrzymasz wtedy wszystkie dane w tablicy.
źródło
$.ajax
temu bardzo łatwo jest przekazać te dane.HTML nie zapewnia możliwości generowania JSON z danych formularza.
Jeśli naprawdę chcesz załatwić to od klienta, musisz skorzystać z JavaScript, aby:
Prawdopodobnie lepiej byłoby trzymać się
application/x-www-form-urlencoded
danych i przetwarzać je na serwerze zamiast JSON. Twój formularz nie ma żadnej skomplikowanej hierarchii, która przyniosłaby korzyści w postaci struktury danych JSON.Aktualizacja w odpowiedzi na poważne przepisanie pytania…
readystatechange
obsługi, więc nic nie robisz z odpowiedziąźródło
enctype='application/json'
do definicji formularza w celu utworzenia danych JSON w3.org/TR/html-json-formsTwój kod jest w porządku, ale nigdy nie jest wykonywany, przyczyna wysłania przycisku [type = "submit"] po prostu zamień go na type = button
wewnątrz twojego skryptu; formularz nie jest zadeklarowany.
źródło
Spóźniłem się, ale muszę powiedzieć, że dla tych, którzy potrzebują obiektu, używając tylko html, jest na to sposób. W niektórych frameworkach po stronie serwera, takich jak PHP, możesz napisać następujący kod:
Musimy więc ustawić nazwę wejścia tak, jak
object[property]
dla otrzymanego obiektu. W powyższym przykładzie otrzymaliśmy dane z następującym kodem JSON:źródło
Możesz spróbować czegoś takiego:
źródło