Então, eu tenho este formulário 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>
Qual seria a maneira mais fácil de enviar os dados deste formulário como um objeto JSON para o meu servidor quando um usuário clica em enviar?
UPDATE: Eu fui tão longe quanto isso, mas não parece funcionar:
<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));
O que estou fazendo de errado?
$.ajax
eserialize
na API jQuery.Respostas:
Obtenha dados completos do formulário como array e json stringify.
Você pode usá-lo mais tarde no ajax. Ou se você não estiver usando ajax; coloque-o na área de texto oculta e passe para o servidor. Se esses dados são transmitidos como string json por meio de dados de formulário normais, você deve decodificá-lo usando json_decode . Você receberá todos os dados em uma matriz.
fonte
$.ajax
isso é realmente fácil passar esses dados.HTML não fornece nenhuma maneira de gerar JSON a partir de dados do formulário.
Se você realmente deseja lidar com isso no cliente, precisará recorrer ao JavaScript para:
Você provavelmente preferiria manter os
application/x-www-form-urlencoded
dados e processá- los no servidor, em vez de JSON. Seu formulário não possui nenhuma hierarquia complicada que se beneficiaria de uma estrutura de dados JSON.Atualização em resposta à grande reescrita da pergunta…
readystatechange
manipulador, portanto você não faz nada com a respostafonte
enctype='application/json'
à definição de formulário para criar dados JSON w3.org/TR/html-json-formsseu código está correto, mas nunca executado, causa do botão de envio [type = "submit"] basta substituí-lo pelo tipo = botão
dentro do seu script; formulário não é declarado.
fonte
Estou atrasado, mas preciso dizer para quem precisa de um objeto, usando apenas html, há uma maneira. Em algumas estruturas do lado do servidor, como PHP, você pode escrever o seguinte código:
Portanto, precisamos configurar o nome da entrada como
object[property]
para obter um objeto. No exemplo acima, obtivemos dados com o seguinte JSON:fonte