Eu tenho um formulário com nome orderproductForm
e um número indefinido de entradas.
Eu quero fazer algum tipo de jQuery.get ou ajax ou qualquer coisa assim que chamaria uma página através do Ajax e enviar todas as entradas do formulário orderproductForm
.
Suponho que uma maneira seria fazer algo como
jQuery.get("myurl",
{action : document.orderproductForm.action.value,
cartproductid : document.orderproductForm.cartproductid.value,
productid : document.orderproductForm.productid.value,
...
No entanto, eu não sei exatamente todas as entradas do formulário. Existe um recurso, função ou algo que enviaria TODAS as entradas do formulário?
.ajaxSubmit()
/.ajaxForm()
não são funções básicas do jQuery - você precisa do plugin jQuery FormEsta é uma referência simples:
Espero que ajude você.
fonte
type: $(this).attr('method')
se usar omethod
atributo no seu formulário.Outra solução semelhante usando atributos definidos no elemento do formulário:
fonte
get
e o URL atual, respectivamente. Poderia fazer com a adição desta suposição ao código.Há algumas coisas que você precisa ter em mente.
1. Existem várias maneiras de enviar um formulário
Portanto, devemos vincular ao evento de envio de formulário , não ao evento de clique no botão. Isso garantirá que nosso código funcione em todos os dispositivos e tecnologias assistivas agora e no futuro.
2. Hijax
O usuário pode não ter o JavaScript ativado. Um padrão hijax é bom aqui, onde assumimos o controle suavemente do formulário usando JavaScript, mas o deixamos submissível se o JavaScript falhar.
Devemos extrair o URL e o método do formulário, portanto, se o HTML mudar, não precisaremos atualizar o JavaScript.
3. JavaScript Discreto
Usar event.preventDefault () em vez de return false é uma boa prática, pois permite que o evento borbulhe . Isso permite que outros scripts se vinculem ao evento, por exemplo, scripts de análise que podem estar monitorando as interações do usuário.
Rapidez
Idealmente, devemos usar um script externo, em vez de inserir nosso script embutido. Podemos criar um link para isso na seção de cabeçalho da página usando uma tag de script ou um link para ele na parte inferior da página, para acelerar. O script deve melhorar silenciosamente a experiência do usuário, não atrapalhar.
Código
Supondo que você concorda com todas as opções acima, e deseja capturar o evento de envio e manipulá-lo via AJAX (um padrão de hijax), você pode fazer algo assim:
Você pode acionar manualmente o envio de um formulário sempre que quiser via JavaScript usando algo como:
Editar:
Recentemente, tive que fazer isso e acabei escrevendo um plugin.
Adicione um atributo data-autosubmit à sua tag de formulário e você poderá fazer o seguinte:
HTML
JS
fonte
Você também pode usar FormData (mas não disponível no IE):
É assim que você usa FormData .
fonte
Versão simples (não envia imagens)
Copie e cole ajaxificação de um formulário ou de todos os formulários em uma página
É uma versão modificada da resposta de Alfrekjv
Javascript
Eu queria editar a resposta de Alfrekjv, mas me desviei muito dela e decidi postar isso como uma resposta separada.
Não envia arquivos, não suporta botões; por exemplo, clicar em um botão (incluindo um botão de envio) envia seu valor como dados do formulário, mas, por se tratar de uma solicitação ajax, o clique no botão não será enviado.
Para oferecer suporte aos botões, você pode capturar o clique real do botão em vez do envio.
No lado do servidor, você pode detectar uma solicitação ajax com este cabeçalho que o jquery define
HTTP_X_REQUESTED_WITH
para phpPHP
fonte
Esse código funciona mesmo com entrada de arquivo
fonte
Array.from(new FormData(form))
itera sobre este iterador FormData :)Eu realmente gostei desta resposta do superluminário e, especialmente, a maneira como ele envolveu a solução em um plugin jQuery . Então, obrigado ao superluminário por uma resposta muito útil. No meu caso, porém, eu queria um plug-in que me permitisse definir os manipuladores de eventos de sucesso e erro por meio de opções quando o plug-in for inicializado.
Então, aqui está o que eu vim com:
Esse plug-in permite que eu facilmente "ajaxifique" formulários html na página e forneça manipuladores de submissão , sucesso e erro para implementar feedback ao usuário sobre o status do envio do formulário. Isso permitiu que o plugin fosse usado da seguinte maneira:
Observe que os manipuladores de eventos de sucesso e erro recebem os mesmos argumentos que você receberia dos eventos correspondentes do método jQuery ajax .
fonte
Eu tenho o seguinte para mim:
Onde
Isso pressupõe que a postagem para 'url' retorne um ajax na forma de
{success: false, error:'my Error to display'}
Você pode variar isso como quiser. Sinta-se livre para usar esse trecho.
fonte
target
aqui? Por que você enviaria um formulário com o AJAX, apenas para redirecionar para uma nova página?jQuery AJAX enviar formulário , nada mais é do que enviar um formulário usando o ID do formulário quando você clica em um botão
Siga os passos
Etapa 1 - a tag do formulário deve ter um campo de ID
Botão no qual você clicará
Etapa 2 - o evento de envio está no jQuery, o que ajuda a enviar um formulário. no código abaixo, estamos preparando a solicitação JSON a partir do nome do elemento HTML .
para demonstração ao vivo, clique no link abaixo
Como enviar um formulário usando o jQuery AJAX?
fonte
considere usar
closest
fonte
Eu sei que essa é uma
jQuery
pergunta relacionada, mas agora os dias com o JS ES6 são muito mais fáceis. Como não há umajavascript
resposta pura , pensei em adicionar umajavascript
solução pura e simples para isso, que na minha opinião é muito mais limpa, usando afetch()
API. Essa é uma maneira moderna de implementar solicitações de rede. No seu caso, como você já possui um elemento de formulário, podemos simplesmente usá-lo para criar nossa solicitação.fonte
Para evitar vários envios de dados do formulário:
Não se esqueça de desvincular o evento de envio, antes que o formulário seja enviado novamente, o usuário pode chamar a função sumbit mais de uma vez, talvez ele tenha esquecido algo ou tenha sido um erro de validação.
fonte
Se você estiver usando o formulário .serialize () - precisará dar a cada elemento do formulário um nome como este:
E o formulário é serializado assim:
fonte
Você pode usar isso na função de envio como abaixo.
Formulário HTML
Função jQuery:
Para obter mais detalhes e amostra, visite: http://www.spiderscode.com/simple-ajax-contact-form/
fonte
Esta não é a resposta para a pergunta do OP,
mas , se você não puder usar o formulário estático DOM, também poderá tentar assim.
fonte
Tentar
Mostrar snippet de código
fonte
Apenas um lembrete amigável que também
data
pode ser um objeto:fonte
Javascript
HTML
fonte
Há também o evento de envio, que pode ser acionado como este $ ("# form_id"). Submit (). Você usaria esse método se o formulário já estiver bem representado em HTML. Você acabou de ler a página, preencher as entradas do formulário com as coisas e chamar .submit (). Ele usará o método e a ação definidos na declaração do formulário, para que você não precise copiá-lo para o seu javascript.
exemplos
fonte