• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

QuickFire

[PHP] Sajax

9 mensagens neste tópico

Depois de alguma pesquisa sobre AJAX na web encontrei um framework que facilita a vida de qualquer webmaster. Chama-se Sajax.

Este framework dá para trabalhar em inúmeras aplicações entre elas: PHP, ASP, Cold Fusion, Pytho, Perl, entre outros... Para mais informações sobre Sajax vão ao site http://www.modernmethod.com/sajax/

Bem começemos agora a parte 1 do nosso pequeno tutorial.

Vai consistir basicamente em criar uma calculadora para multiplicar. Espantoso dizem vocês. Mas com esta calculadora vão puder fazer tudo e mais alguma coisa se tiverem imaginação.

Então para isto precisamos do ficheiro 'Sajax.php' que facilmente encontram no site acima e aqui vai o código devidamente comentado:

<?php
// Incluir o Sajax
require("Sajax.php");

// Criar uma função que vai ser utilizada pelo Sajax (podem também incluir um ficheiro com várias funções sem ter de a criar agora)

function multiply($x, $y) { 
//Função que vamos usar para multiplicar
    return $x * $y;
}

// Instancia à classe do AJAX
sajax_init();

// Este é o debug mode, quando ligado (1) ele diz-nos todas as informações e mais algumas, é porreiro quando estamos a desenvolver, quando acabar o desenvolvimento desligam(0)
$sajax_debug_mode = 1;

// Declara a função que vai ser utilizada pelo Sajax (neste caso é a função que temos em cima)

sajax_export("multiply");

// Declaração obrigatória
sajax_handle_client_request();
?>
<html>
<head>
<title>Calculadora de multiplicar</title>
<script>
<?php
// Declaração obrigatória, serve para criar os códigos necessários de javascript
sajax_show_javascript();
?>

// Para cada função criada no PHP é preciso fazer 2 funções no Javascript, sendo que a primeira trata os dados vindos do utilizador, e a segunda trata os dados returnados pelo PHP

function do_multiply()
{
    var x, y;
    
    x = document.getElementById("x").value;
    y = document.getElementById("y").value;
    
    // Função responsavel por enviar os dados ao PHP, esta tem de ter o prefixo de 'x_' (sem plicas), logo como a nossa função se chama 'multiply', esta vai ficar 'x_multiply'

    x_multiply(x, y, do_multiply_cb);
}

// Função responsavel por intrepretar os dados vindos do PHP, neste caso dá o valor returnado ao text input z

function do_multiply_cb(z)
{
    // Atribui o valor do retorno do PHP ao campo de id chamado z
    document.getElementById("z").value = z;
}
</script>
<!-- Analytics -->
<script type="text/javascript">
 var _gaq = _gaq || [];
 _gaq.push(['_setAccount', 'UA-31683991-1']);
 _gaq.push(['_setDomainName', 'portugal-a-programar.pt']);
 _gaq.push(['_trackPageview']);
 (function() {
   var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
   ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
   var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
 })();
</script>
<!-- /Analytics --><!-- Analytics -->
<script type="text/javascript">
 var _gaq = _gaq || [];
 _gaq.push(['_setAccount', 'UA-31683991-1']);
 _gaq.push(['_setDomainName', 'portugal-a-programar.pt']);
 _gaq.push(['_trackPageview']);
 (function() {
   var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
   ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
   var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
 })();
</script>
<!-- /Analytics --><!-- Analytics -->
<script type="text/javascript">
 var _gaq = _gaq || [];
 _gaq.push(['_setAccount', 'UA-31683991-1']);
 _gaq.push(['_setDomainName', 'portugal-a-programar.pt']);
 _gaq.push(['_trackPageview']);
 (function() {
   var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
   ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
   var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
 })();
</script>
<!-- /Analytics --></head>

<body>
<input type="text" name="x" id="x" value="2" size="3">
*
<input type="text" name="y" id="y" value="3" size="3">
=
<input type="text" name="z" id="z" value="" size="3">
<input type="button" name="check" value="Calculate"
onclick="do_multiply(); return false;">
</body>
</html> 

E pronto, básicamente é só isto. Vão 'brincando' com o código e vão ver resultados surpreendentes.

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Um parece ser uma framework muito interessante... sera que tb ha para JSP/Struts ? e que ainda nao e simples nem escalavel programar Ajax lah.. (pelo menos que eu saiba)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu não vejo nenhuma referência a JSP no site, nem nos ficheiros do Sajax por isso suponho que não dê :|

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

!!

Parece-me mais complicado de trabalhar do que o método "normal", sem framework nenhum... Alguém me explica isso melhor..?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sinceramente prefiro o método standart (XMLHTTP), é muito simples de usar.

Uma pergunta, com esta framework os caracteres, do ç é, não vêm marados??

Cumps.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sinceramente prefiro o método standart (XMLHTTP), é muito simples de usar.

Uma pergunta, com esta framework os caracteres, do ç é, não vêm marados??

Cumps.

Vêm sim :) O que fiz foi passar as vars com um encode, na altura resultou ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se estás a tentar passar strings com esses caracteres para javascript, o output tem de estar em UTF-8, salvo erro. Penso que um utf8_encode() chega, mas por via das dúvidas convem enviar um header com o encoding correcto. Digo eu.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim. Foi esse o método que arranjei para que os caracteres não viessem marados. utf8_encode() no php (por exemplo), e quando recebo no javascript, faço o URIDecode()  :biggrin:

Cumps pessoal.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora