Se eu tiver um formulário como este,
<form action="/Car/Edit/17" id="myForm" method="post" name="myForm"> ... </form>
como posso enviá-lo sem redirecionar para outra visualização por JavaScript / jQuery?
Eu li muitas respostas de Stack Overflow, mas todas elas me redirecionam para a visualização retornada pela função POST.
javascript
jquery
html
forms
Duke Nuke
fonte
fonte
Respostas:
Para conseguir o que deseja, você precisa usar jQuery Ajax conforme abaixo:
Experimente também este:
Solução final
Isso funcionou perfeitamente. Eu chamo essa função de
Html.ActionLink(...)
fonte
@Html.ActionLink("Add a Report", "Create", "Reports", new { carId = Model.Id }, new { onclick = "FUNCTION_WHICH_SUBMITES_FORM()" })
function SubForm (){ alert("1"); //e.preventDefault(); $.ajax({ url:'/Car/Edit/@Model.Id/', type:'post', data:$('#myForm').serialize(), success:function(){ alert("fasf"); } }); }
Você pode conseguir isso redirecionando o formulário
action
para um invisível<iframe>
. Não requer nenhum JavaScript ou qualquer outro tipo de script.fonte
<input type='submit'...
para<input type='reset'
e adicionaronclick='document.forms["myForm"].submit();'>
Coloque um oculto
iFrame
na parte inferior de sua página etarget
em seu formulário:Rápido e fácil. Lembre-se de que, embora o
target
atributo ainda tenha amplo suporte (e suporte no HTML5), ele foi descontinuado no HTML 4.01.Portanto, você realmente deve usar o Ajax para se preparar para o futuro.
fonte
target
é totalmente válido, portanto, AJAX ainda é opcional.Como todas as respostas atuais usam jQuery ou truques com iframe, percebi que não há mal nenhum em adicionar um método apenas com JavaScript:
fonte
Ok, eu não vou te dizer uma maneira mágica de fazer isso porque não existe. Se você tiver um atributo de ação definido para um elemento de formulário, ele irá redirecionar.
Se você não quiser redirecionar, simplesmente não defina nenhuma ação e defina
onsubmit="someFunction();"
No seu
someFunction()
você faz o que quiser, (com AJAX ou não) e no final, você adicionareturn false;
para dizer ao navegador para não enviar o formulário ...fonte
Você precisa do Ajax para fazer isso acontecer. Algo assim:
fonte
Veja a
post
função do jQuery .Gostaria de criar um botão e definir um
onClickListener
($('#button').on('click', function(){});
) e enviar os dados na função.Além disso, veja a
preventDefault
função de jQuery!fonte
Solução de uma linha a partir de 2020, se seus dados não devem ser enviados como
multipart/form-data
ouapplication/x-www-form-urlencoded
:fonte
action="..."
, evita efetivamente a troca de página, mas também evita que os dados sejam enviados pela rede.O efeito desejado também pode ser obtido movendo o botão enviar para fora do formulário, conforme descrito aqui:
Impedir o recarregamento da página e o redirecionamento no formulário submit ajax / jquery
Como isso:
fonte
Usando este snippet, você pode enviar o formulário e evitar o redirecionamento. Em vez disso, você pode passar a função de sucesso como argumento e fazer o que quiser.
E então é só fazer:
fonte
Se você controlar o back-end, use algo como em
response.redirect
vez deresponse.send
.Você pode criar páginas HTML personalizadas para isso ou apenas redirecionar para algo que você já possui.
Em Express.js:
fonte