Eu tenho uma função ajax jQuery e gostaria de enviar um formulário inteiro como dados de postagem. Estamos constantemente atualizando o formulário, portanto, torna-se tedioso atualizar constantemente as entradas do formulário que devem ser enviadas na solicitação.
155
Respostas:
Há uma função que faz exatamente isso:
http://api.jquery.com/serialize/
fonte
person[0].firstName
person[0].lastName
person[1].firstName
person[1].lastName
<input name="person[1].lastName">
?serialize () não é uma boa ideia se você deseja enviar um formulário com o método post. Por exemplo, se você deseja passar um arquivo via ajax, não vai funcionar.
Suponha que tenhamos um formulário com este id: "myform".
a melhor solução é criar um FormData e enviá-lo:
fonte
var
, em 2016!form.serialize()
mas simplesmente não funcionou para o upload de arquivos.new FormData(this)
funcionou muito bemDe uso geral
serialize()
o elemento do formulário.Lembre-se de que várias opções <select> são serializadas sob a mesma chave, por exemplo
resultará em uma sequência de consultas que inclui várias ocorrências do mesmo parâmetro de consulta:
que pode não ser o que você deseja no back-end.
Eu uso esse código JS para reduzir vários parâmetros a uma chave única separada por vírgula (copiada descaradamente da resposta de um comentarista em um tópico no lugar de John Resig):
que transforma o acima em:
No seu código JS, você chamaria assim:
Espero que ajude.
fonte
Usar
serialize ()
Serialize um formulário para uma string de consulta, que pode ser enviada para um servidor em uma solicitação Ajax.
fonte
Uma boa opção jQuery para fazer isso é através do FormData . Este método também é adequado ao enviar arquivos através de um formulário!
Sua função de envio no jQuery ficaria assim:
Para adicionar dados ao seu formulário, você pode usar uma entrada oculta no seu formulário ou adicioná-la rapidamente:
fonte
url: $(this).attr('action'),
vezVocê apenas precisa postar os dados. e Usando parâmetros de conjunto de funções jquery ajax. Aqui está um exemplo.
fonte
As outras soluções não funcionaram para mim. Talvez o antigo DOCTYPE no projeto em que estou trabalhando evite as opções HTML5.
Minha solução:
js:
fonte