Você não poderá fazer isso facilmente com javascript comum. Quando você publica um formulário, as entradas do formulário são enviadas ao servidor e sua página é atualizada - os dados são tratados no lado do servidor. Ou seja, a submit()
função realmente não retorna nada, apenas envia os dados do formulário para o servidor.
Se você realmente deseja obter a resposta em Javascript (sem a atualização da página), precisará usar o AJAX e, quando começar a falar sobre o uso do AJAX, precisará usar uma biblioteca. O jQuery é de longe o mais popular e o meu favorito. Existe um ótimo plugin para jQuery chamado Form, que fará exatamente o que parece desejado.
Aqui está como você usaria o jQuery e esse plugin:
$('#myForm')
.ajaxForm({
url : 'myscript.php', // or whatever
dataType : 'json',
success : function (response) {
alert("The server says: " + response);
}
})
;
var xhr = new XMLHttpRequest() xhr.open("POST", "myscript.php"); xhr.onload=function(event){ alert("The server says: " + event.target.response); }; var formData = new FormData(document.getElementById("myForm")); xhr.send(formData);
Uma alternativa do Ajax é definir um invisível
<iframe>
como o destino do seu formulário e ler o conteúdo dele<iframe>
em seuonload
manipulador. Mas por que se preocupar quando há Ajax?Nota: Eu só queria mencionar essa alternativa, já que algumas das respostas afirmam que é impossível conseguir isso sem o Ajax.
fonte
<iframe>
POSTs (com retorno de chamada paraparent
). Para downloads e uploads tanto ...A maneira Javascript não-jQuery de baunilha, extraída do comentário de 12me21:
For
POST
é o tipo de conteúdo padrão "application / x-www-form-urlencoded", que corresponde ao que estamos enviando no snippet acima. Se você deseja enviar "outras coisas" ou ajustá-lo de alguma forma, veja aqui alguns detalhes detalhados.fonte
<input type='button' onclick="submitForm(); return false;">
ou você pode adicionar um ouvinte de eventos para o evento 'enviar' como resposta Marcus': stackoverflow.com/a/51730069/32453Estou fazendo assim e está funcionando.
fonte
event.preventDefault();
(event
= primeiro argumento da função de envio) em vez dereturn false
. Retornar false não apenas impedirá o navegador de enviar o formulário, mas também impedirá que outros efeitos colaterais possam ser importantes. Não são lotes de perguntas relacionadas a este.FormData($("myform")[0])
se você estiver tentando um tipo de entrada = upload de arquivo.event.target.action
e em$(event.target).serialize()
vez de$('#form').attr('action')
e$('#form').serialize()
.Futuros pesquisadores da Internet:
Para novos navegadores (a partir de 2018: Chrome, Firefox, Safari, Opera, Edge e a maioria dos navegadores móveis, mas não o IE),
fetch
é uma API padrão que simplifica as chamadas de rede assíncronas (para as quais costumávamos precisarXMLHttpRequest
ou jQuery$.ajax
).Aqui está uma forma tradicional:
Se um formulário como o acima foi entregue a você (ou você o criou por ser um html semântico), você pode agrupar o
fetch
código em um ouvinte de evento, como abaixo:(Ou, como no pôster original que você deseja chamá-lo manualmente sem um evento de envio, basta colocar o
fetch
código lá e passar uma referência aoform
elemento em vez de usá-loevent.target
.)Documentos:
Buscar: https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API
Outro: https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms/Sending_forms_through_JavaScript Essa página em 2018 não menciona a busca (ainda). Mas menciona que o truque target = "myIFrame" está obsoleto. E também tem um exemplo de form.addEventListener para o evento 'submit'.
fonte
Não tenho certeza de que você entende o que submit () faz ...
Quando você faz
form1.submit();
o formulário, as informações são enviadas ao servidor da web.O servidor da Web fará o que é suposto e devolverá uma nova página da Web ao cliente (geralmente a mesma página com algo alterado).
Portanto, não há como "capturar" o retorno de uma ação form.submit ().
fonte
Não há retorno de chamada. É como seguir um link.
Se você deseja capturar a resposta do servidor, use AJAX ou publique-a em um Iframe e pegue o que aparece após o
onload()
evento do iframe .fonte
Você pode
event.preventDefault()
no manipulador de cliques do botão enviar para garantir que osubmit
evento padrão do formulário HTML não seja acionado (que é o que leva à atualização da página).Outra alternativa seria usar a marcação de forma mais hackeada: é o uso de
<form>
etype="submit"
isso está atrapalhando o comportamento desejado aqui; pois, em última análise, isso leva a eventos de clique que atualizam a página.Se você quiser ainda usar
<form>
, e você não quer escrever costume clique manipuladores, você pode usar jQueryajax
método, que abstrai todo o problema afastado para você, expondo métodos promessa parasuccess
,error
, etc.Para recapitular, você pode resolver seu problema:
• impedir o comportamento padrão na função de manipulação usando
event.preventDefault()
• usar elementos que não têm comportamento padrão (por exemplo
<form>
)• usando jQuery
ajax
(Acabei de perceber que esta pergunta é de 2008, não sei por que ela apareceu no meu feed; de qualquer forma, espero que seja uma resposta clara)
fonte
Este é o meu código para este problema:
fonte
Caso você queira capturar a saída de uma solicitação AJAX usando o Chrome, siga estas etapas simples:
fonte
fonte
Com base na resposta de @rajesh_kw ( https://stackoverflow.com/a/22567796/4946681 ), eu manejo erros e êxito de publicação de formulário:
Faço uso de
this
modo que minha lógica seja reutilizável, espero que o HTML seja retornado com êxito, por isso renderizo e substituo a página atual e, no meu caso, espero um redirecionamento para a página de login se a sessão expirar, portanto Intercepto esse redirecionamento para preservar o estado da página.Agora, os usuários podem fazer login através de outra guia e tentar enviar novamente.
fonte
Você precisa estar usando AJAX. O envio do formulário geralmente resulta no carregamento de uma nova página pelo navegador.
fonte
Você pode fazer isso usando javascript e tecnologia AJAX. Dê uma olhada no jquery e, neste formulário, conecte-o . Você só precisa incluir dois arquivos js para registrar um retorno de chamada para o formulário.submit.
fonte
Você pode fazer isso usando jQuery e o
ajax()
método:fonte
Antes de tudo, use $ (document) .ready (function ()) dentro deste use ('formid'). submit (function (event)) e evite a ação padrão depois que chama o envio de formulário ajax $ .ajax ({,, ,}); será necessário o parâmetro que você pode escolher de acordo com sua exigência e chamar a função de sucesso: function (data) {// faça o que você quiser que meu exemplo coloque a resposta em div}
fonte
Primeiro de tudo, precisaremos serializeObject ();
então você faz uma postagem básica e obtém resposta
fonte
Eu tenho o seguinte código executado perfeitamente usando ajax com dados de formulário de várias partes
fonte
Você pode usar jQuery.post () e retornar respostas JSON bem estruturadas do servidor. Também permite validar / higienizar seus dados diretamente no servidor, o que é uma boa prática porque é mais seguro (e até mais fácil) do que fazer isso no cliente.
Por exemplo, se você precisar postar um formulário html no servidor (para saveprofilechanges.php) com dados do usuário para um registro simples:
I. Peças do cliente:
Parte HTML:
Parte do script Ib:
II Parte do servidor (saveprofilechanges.php):
fonte
você pode fazer isso sem ajax.
escreva seu like abaixo.
.. .. ..
e depois em "action.php"
depois de frmLogin.submit ();
leia a variável $ submit_return ..
$ submit_return contém valor de retorno.
boa sorte.
fonte