Eu tenho um formulário simples com remote = true.
Na verdade, este formulário está em uma caixa de diálogo HTML, que é fechada assim que o botão Enviar é clicado.
Agora, preciso fazer algumas alterações na página HTML principal após o envio do formulário com êxito.
Eu tentei isso usando jQuery. Mas isso não garante que as tarefas sejam executadas após alguma forma de resposta do envio do formulário.
$("#myform").submit(function(event) {
// do the task here ..
});
Como anexar um retorno de chamada, para que meu código seja executado somente após o envio do formulário com êxito? Existe alguma maneira de adicionar algum retorno de chamada .success ou .complete ao formulário?
Respostas:
Eu apenas fiz isso -
E as coisas funcionaram perfeitamente.
Consulte esta documentação da API para obter detalhes mais específicos.
fonte
<form>
é enviado normalmente? (Quero dizer, não com o Ajax) O que posso colocar no primeiro argumento de.bind()
? EDIT: bem, eu achoclick
. Nvm, desculpe. : pNão consegui que a solução votada número um funcionasse de maneira confiável, mas achei que isso funciona. Não tenho certeza se é necessário ou não, mas não tenho um atributo de ação ou método na tag, o que garante que o POST seja tratado pela função $ .ajax e oferece a opção de retorno de chamada.
fonte
$(this).serialize()
linha. Ele permitejQuery.ajax()
enviar o formulário existente em segundo plano, capturar a resposta do servidor e fazer algo com ele..serialize
não inclui entradas de arquivo na sua solicitação POST. Use o HTML5 FormData (ver esta questão ) em vez a menos que você está apoiando navegadores antigos como o IE <9$(this).serialize()
, resolveu meus problemas!Você precisará fazer as coisas manualmente com uma chamada AJAX para o servidor. Isso exigirá que você substitua o formulário também.
Mas não se preocupe, é um pedaço de bolo. Aqui está uma visão geral de como você trabalhará com seu formulário:
preventDefault
método)Primeiro, você precisará cancelar a ação de envio do formulário da seguinte forma:
E então, pegue o valor dos dados. Vamos apenas assumir que você tem uma caixa de texto.
E, em seguida, dispare uma solicitação. Vamos apenas assumir que é uma solicitação POST.
E isso deve fazê-lo.
Nota 2: para analisar os dados do formulário, é preferível usar um plug - in . Isso tornará sua vida muito fácil, além de fornecer uma boa semântica que imita uma ação de envio de formulário real.
Nota 2: Você não precisa usar adiadores. É apenas uma preferência pessoal. Você também pode fazer o seguinte e deve funcionar também.
fonte
Para o MVC, havia uma abordagem ainda mais fácil. Você precisa usar o formulário Ajax e definir o AjaxOptions
aqui está o código de envio, está na seção de documentos prontos e vincula o evento onclick do botão para enviar o formulário
aqui está o retorno de chamada mencionado em AjaxOptions
no método do controlador para MVC parece com isso
fonte
Não acredito que exista uma função de retorno de chamada como a que você descreve.
O que é normal aqui é fazer as alterações usando alguma linguagem do lado do servidor, como PHP.
No PHP, você pode, por exemplo, buscar um campo oculto no seu formulário e fazer algumas alterações, se houver.
PHP:
Uma maneira de fazer isso no Jquery é usar o Ajax. Você pode ouvir o envio, retornar false para cancelar seu comportamento padrão e usar o jQuery.post (). O jQuery.post possui um retorno de chamada bem-sucedido.
http://api.jquery.com/jQuery.post/
fonte
Os manipuladores "ao enviar" do formulário são chamados antes do envio do formulário. Não sei se há um manipulador a ser chamado após o envio do formulário. No sentido tradicional não-Javascript, o envio do formulário recarregará a página.
fonte
fonte
ajaxForm()
instalou um componente de terceiros? Não é uma parte padrão do jQuery.