Produtos Divertidos? Eu Compraria!

O desenvolvedor é um blog sobre desenvolvimento web, não tratando apenas de programação mas também compartilhando experiências, métodos, debates e tendências da internet.

O Desenvolvedor é um blog de www.andafter.org
Assinar o Feed RSS
Usando a Prototype - passo 2 - submit de form por ajax

Usando a Prototype - passo 2 - submit de form por ajax

Muito bomEste texto foi classificado como Muito bom
Em Internet, Programação, Softwares
Por Chris Benseler
3 de Setembro de 2008

Segundo post sobre o uso da prototype: como fazer um request em ajax serializando dados de um form

RSS Acompanhe O Desenvolvedor por Feeds!


Uma das coisas básicas em termos de programação para web é fazer um formulário em que você envia os dados para uma página que recebe os mesmos e insere (ou atualiza) uma tabela no banco de dados.
Vou mostrar abaixo como fazer isso de uma forma mais bacana, por ajax (sem precisar dar submit mesmo no form) com a ajuda da prototype (seguindo a série de posts), e totalmente acessíve. (se o usuário estiver num browser com o javascript desabilitado, funcionará corretamente, da forma tradicional).

Como falei, usaremos a prototype. Mais especificamente, o método request() da classe Form. Esse método serializa os dados do formulário e faz o request usando o método request() da classe Ajax da própria prototype, usando a action do form como url.
Obs.: O que é serializar os dados do form? O método percorre todos os elementos de dados de um formulário (inputs, selects, textareas...) e monta uma string no formato [nome do primeiro elemento]=[valor do primeiro elemento]&[nome do segundo elemento]=[valor do segundo elemento]&..&[nome do último elemento]=[valor do último elemento]
Mais sobre a serialização: http://www.prototypejs.org/api/form/serialize

No exemplo abaixo, ao clicar no botão submit do form, a função javascript é chamada. Essa função recebe o próprio form como parâmetro, e já chamo diretamente o método request() que faz o request para edit.php
No retorno da função (chamado de callback) eu verifico o que é retornado por esse edit.php
Nele, eu defini que se der algum erro será jogado o valor -1, e em caso de sucesso, 1 (e, nesse caso, chamo o método reset() que apaga todos os dados preenchidos no formulário, deixando-o pronto para uma nova inserção)

Código funciona html + javascript: 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Exemplo Prototype - form</title>
<script src="http://www.prototypejs.org/assets/2008/1/25/prototype-1.6.0.2.js"></script>
<script type="text/javascript">
    function submitForm(form) {
        /*
        usa método request() da classe Form da prototype, que serializa os campos
        do formulário e submete (por POST como default) para a action especificada no form
        */
        form.request({
          onComplete: function(transport){
              /*
            se o retorno for diferente de -1, entende-se que não houve problemas, então apaga-se
            os campos do formulário usando o método reset() da classe Form
            */
            if(transport.responseText!=-1)
                form.reset();
            }
        });
        return false;
    }
</script>
</head>
<body>
<h1>Submeter form com prototype</h1>
<form id="edit" name="edit" action="edit.php" onsubmit="submitForm(this); return false;">
    <label for="name">nome:</label><input type="text" name="name" id="name" />
    <label for="desc">descrição:</label><input type="text" name="desc" id="desc" />
    <label for="quant">quantidade:</label><input type="text" name="quant" id="quant" />
    <input type="submit" value="salvar" />
</form>
</body>
</html>



Segue abaixo também o código da página edit.php; vale lembrar que independe se é um php ou asp ou qualquer outra coisa. Conforme já comentei nesse post aqui  a linguagem usada no server-side não tem impacto algum na implementação javascript - devem ser implementações totalmente desacopladas (até porque uma é server-side, e outra client-side).

<?php
$bdConnection = mysql_connect("localhost", "root", "");
mysql_select_db("exemplos_andafter");
$sql = "INSERT INTO `produtos` (`name`, `desc`, `quant`) VALUES(´" . $_POST["name"] . "´, ´" . $_POST["desc"] . "´, ´" . $_POST["quant"] . "´)";
$result = mysql_query($sql) or die("-1");
echo("1");
?>

Qualquer dúvida, comentem :)

 

O que você achou do texto?

  • Muito ruim
  • Ruim
  • Regular
  • Bom
  • Muito bom
Sua opinião é o que faz a comunidade funcionar, colabore para isso!

Tags: php, ajax, prototype, request, serialize

Enviar para um amigo
Você pode comentar, assinar o feed, conhecer mais sobre o autor e ajudar a divulgar este artigo em sua ferramenta favorita através dos botões abaixo.
  • Rec6
  • ueba
  • linkk
  • dihitt
  • linkloko
  • websapiens
  • linkto
  • Eu curti

Comentários

Guilherme Serrano

3/9/2008 23:51:00

Show!

Só uma pergunta, na linha do php:
# $result = mysql_query($sql) or die("-1");

o -1 é inserido no html?

Por exemplo, para eu retornar um erro em ASP teria que exibir -1 no documento e pronto? Pergunto porque não sei se o "or die" printa o que tá escrito ou o que...

Não me mate chris, eu sei que o foco aqui é o javascript! haha :P

[Responder este comentário]

Chris Benseler

4/9/2008 10:18:00

Opá!
A diretiva die() pára o processo de "compilação" do php (okey, acho que não é compilação, mas sim interpretação) e se tiver algum parâmetro (uma string) passada, printa na tela.
Nesse caso, o retorno do responseText seria mesmo só o -1.
Lembrar que se você tiver ali no .php as tags htmls de abrir e fechar o documento, abrir e fechar body, etc... eles serão printados tb!

[Responder este comentário]
Deixe seu comentário!

Nome (requerido)

E-mail (requerido - não será divulgado)

URL

Quanto é 2 + 4?




web tracker