Enviar formulário para o php sem refresh – jQuery.ajax

Eu havia postado, como enviar um formulário com ajax, aproveitando o callback submitHandler do jQuery.validate.

Porém, se vc não estiver usando esse plugin, e quiser apenas usar o ajax do jQuery, o seguinte basta:

<html>
<head>
	<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
	<script type="text/javascript">
	jQuery(document).ready(function(){
		jQuery('#ajax_form').submit(function(){
			var dados = jQuery( this ).serialize();

			jQuery.ajax({
				type: "POST",
				url: "processa.php",
				data: dados,
				success: function( data )
				{
					alert( data );
				}
			});

			return false;
		});
	});
	</script>
</head>
<body>
	<form method="post" action="" id="ajax_form">
		<label><input type="hidden" name="id" value="" /></label>
		<label>Nome: <input type="text" name="nome" value="" /></label>
		<label>Email: <input type="text" name="email" value="" /></label>
		<label>Telefone: <input type="text" name="telefone" value="" /></label>

		<label><input type="submit" name="enviar" value="Enviar" /></label>
	</form>
</body>
</html>

Primeiro eu importo a lib jQuery:

	<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>

Nada de novo até aqui.

Faço corretamente, e disparo a minha função no evento onsubmit do formulário:

		jQuery('#ajax_form').submit(function(){

Vi alguns tutoriais( de blogs, fóruns e video aulas ), usando o evento onclick do botão submit(ou button), “fingem”, que isso funciona, e depois várias pessoas vão aos fóruns, por causa dos problemas gerados por esses códigos mal escritos e incorretos.

O correto é usar no onsubmit do form, e “desativar” ele, com aquele return false; que envio na linha 19

			return false;

Daí em diante, não tem segredo, é o mesmo miolo que usei para enviar com o jQuery.validate.
De graça, o método .serialize(), cria a query string com os dados do formulário, e usamos essa variavel para enviar a função ajax.

Ali no success: function( data ) (linha 13), é o callback que será disparado, assim que a requisição retornar(status 200 e tal).

Bom, é isso =)
Comentem, compartilhem. Sei que é um assunto já bastante “batido”, porém não me custava deixar um código bem escrito, até para tentar minimizar os efeitos dos maus tutoriais.

Posted by: admin on January 20, 2012 @ 7:00 am
Filed under: AJAX,jQuery

3 Comments »

  1. Sugiro informar “type” nas propriedades do AJAX como sendo o mesmo valor do atributo METHOD do formulário. Fica mais genérico ;)

    Comment by Evandro Oliveira — January 20, 2012 @ 11:09 am

  2. Sim sim, perfeita sugestão.
    Esse post saiu “as pressas” pq é uma introdução para o próximo. =)

    Nele eu faço todas essas otimizações. =) Vlw!

    Comment by admin — January 20, 2012 @ 11:55 am

  3. Pra quem tiver interesse no assunto, eu fiz um plugin pro jQuery chamado Auto-Ajax que serve pra isso, enviar um form por ajax sem refresh na página. E ele funciona sem você precisar escrever uma linha de javascript.

    Quem quiser aprender mais a fundo, pode olhar o código fonte do meu plugin. Ele é open source e está disponível no github: https://github.com/bighi/Auto-Ajax

    Comment by Leonardo Bighi — January 30, 2012 @ 11:30 am

RSS feed for comments on this post. TrackBack URL

Leave a comment