Você está na página 1de 31

Ajax - iMasters Fóruns Página 1 de 31

iM a s t e r s Ho m e D el i c io u s Gr u p o s d e u s u á r io s F. A . Q . R eg r a s Bu s c a Membros

Logado como: Waldemiro ( Sair ) Painel de Controle — Ver Novos Posts — Meu Assistente — 0 Novas Mensagens

iMasters Fóruns » Programação » PHP » Cursos

3 Páginas < 1 2 3 >

Ajax, o novo mundo client-server Opções

Sep 30 2005, 12:49 PM Post #21


marcinhha

Tou tentando fazer o script de verificar quantos usuários estão online..

Tou com o seguinte erro:

CODE

Fatal error: Call to undefined function: file_put_contents()


in /home/www/des.abaco.com.br/www2/suporte/ajax/usersCount.php on line 40
Grupo: Moderadores
Posts: 922 usuários online
Registrado: 13 Apr 2005
Membro nº: 17.806

Alguém pode me ajudar? heheh

Valeu

--------------------
Márcia O. Carmo
- Designer de interfaces -

http://www.mah.com.br/

............................................
. "As boas interfaces nos fazem respirar fundo e,
. quando estamos longe, nos fazem sentir saudades..."
............................................

Oct 1 2005, 07:19 AM Post #22


red neck *

essa func só foi adicionada no php5, troque ela por:

so sei que nao sei nada QUOTE

$fopen = fopen($fileName, "w+");

http://forum.imasters.com.br/index.php?showtopic=132737&st=20 29/5/2006
Ajax - iMasters Fóruns Página 2 de 31

fwrite($fopen, implode("|", $newUsers));


Grupo: Membros
fclose($fopen);
Posts: 951
Registrado: 9 Mar 2005
Membro nº: 16.874

acaba dando no mesmo

--------------------
~/ A procura do programa perfeito ! /~

Oct 7 2005, 01:24 PM Post #23


matlorenzo

hei wilker, não consegui entender a parte de tratamento de acentos no uso do método
POST... poderia explicar o q acontece na função q vc desenvolveu pra isso e como vc faz
para "desencriptar" dpois?

Grupo: Membros
Posts: 31
Registrado: 29 Jul 2005
Membro nº: 21.921

Oct 27 2005, 05:32 PM Post #24


Alex Souza

aÊ kra muito bom seu tutorial, pra quem achava que AJAX era só akele cara verde da
liga da justiça vc esclareceu bastante algumas duvidas.
Gostaria de saber se vc tem algum exemplo do tipo:
um combo: Seleciona o estado e disponibiliza as cidades, algo do tipo categoria de
subcategoria.
Grupo: Membros
Posts: 1
Registrado: 27 Oct 2005 Falow !
Membro nº: 25.069
Prarabéns !

Nov 16 2005, 05:29 PM Post #25


Wilker

QUOTE(matlorenzo @ Oct 7 2005, 01:24 PM)

hei wilker, não consegui entender a parte de tratamento de acentos no uso do método
POST... poderia explicar o q acontece na função q vc desenvolveu pra isso e como vc
faz para "desencriptar" dpois?

http://forum.imasters.com.br/index.php?showtopic=132737&st=20 29/5/2006
Ajax - iMasters Fóruns Página 3 de 31

Grupo: Membros
Posts: 517
faz tempo q eu n apareco por aki
Registrado: 25 Aug 2004
De: Recife - PE
Membro nº: 12.479 hehehe

bem, nesse kso eh o seguinte kra, existe um padrao da propria W3 q permite "codificar"
a URL (URL Encoded)

a metodologia eh bem simples, no lugar de escrever:

index.php?nome=Wilker

vc escreve os caracteres como notacao hexadecimal, prefixados de um %

index.php?nome=%FA%AA%09%54%59%44 (chutei os hexadecimal, eh soh pra


mostrar como fica)

vc pode ver essa tabela aki: www.asciitable.com

bem, pra converter oq eu fiz foi pegar o codigo decimal do caractere (com o javascript) e
usei minha funcao pra converter em hexadecimal

pra decodificar o browser faz isso automaticamente, n eh nescessario fazer nada

qq duvida volta a posta (mal ae o atrazo )

--------------------
Wilker Web Chat versao 2.0 esta por vir

Informativo sobre WWC 2.0: http://200.199.74.253/site/pessoal/wilker/wwcinfo.php

Nov 17 2005, 01:55 PM Post #26


MUTANTE_POWER_B

Bem, vou deixar um link aki de uma lib de Ajax... eu gostei muito... facilita muito o uso
do ajax em seu programa.

http://www.phpavancado.net/node/41
http://www.phpavancado.net/node/76

--------------------
Pedro Faria de Miranda Pinto
Grupo: Membros http://www.mutantepower.com.br
Posts: 568 http://www.phpavancado.net *NOVO*
Registrado: 24 Feb 2003
De: Rio de Janeiro Leia as documentações:
Membro nº: 188 http://br.php.net/
http://www.mysql.com/

bot de IRC em PHP?


http://mpbot.sf.net/

http://forum.imasters.com.br/index.php?showtopic=132737&st=20 29/5/2006
Ajax - iMasters Fóruns Página 4 de 31

Dúvidas *Avançadas* de PHP???


Entre no canal #PHPAvancado da rede Brasnet de IRC.

Nov 17 2005, 02:53 PM Post #27


Wilker

vo publica aki uma simples API q eu fiz em Javascript para facilitar o uso do Ajax
(demonstrarei um exemplo de uso depois)

essa eh a parte inicial de uma API q eu to fazendo de Ajax, o resto da API eu vo cria em
classe no PHP, ai vai minha API Javascript:

ajax.js
Grupo: Membros CODE
Posts: 517
Registrado: 25 Aug 2004
De: Recife - PE
function Ajax() {
Membro nº: 12.479 Ajax.dec2hex = function(dec) {
var hex_chars = "0123456789ABCDEF";

var n1 = hex_chars.charAt(Math.floor(dec / 16));


var n2 = hex_chars.charAt(dec % 16);

return n1 + n2;
}

Ajax.init = function() {
var req;

try {
req = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
try {
req = new ActiveXObject("Msxml2.XMLHTTP");
} catch(ex) {
try {
req = new XMLHttpRequest();
} catch(exc) {
req = null;
}
}
}

return req;
}

Ajax.test = function() {
if(Ajax.init())
return true;

http://forum.imasters.com.br/index.php?showtopic=132737&st=20 29/5/2006
Ajax - iMasters Fóruns Página 5 de 31

else
return false;
}

Ajax.open = function(pag, cb) {


var ajax = Ajax.init();

if(ajax) {
var sendCont = Ajax.open.arguments[2] ? Ajax.open.arguments
[2] : null;

if(sendCont) {
ajax.open("POST", pag, true);
ajax.setRequestHeader("Content-Type", "application/x-www-
form-urlencoded");
} else {
ajax.open("GET", pag, true);
}

ajax.onreadystatechange = function() {
if(ajax.readyState == 4) {
if(ajax.status == 200) {
var resp = ajax.responseText;
if(!resp) {
return false;
}

var st = resp.charAt(0);
var txt = resp.substring(2);

if(st == '+') {
if(cb)
eval(cb + '("' + txt + '")');
} else if(st == '-') {
alert('Erro: ' + txt);
return false;
} else {
alert('Erro fatal: ' + resp);
return false;
}
} else {
alert('Erro ' + ajax.status + ': ' +
ajax.statusText);
return false;
}
}
}

ajax.send(sendCont);

http://forum.imasters.com.br/index.php?showtopic=132737&st=20 29/5/2006
Ajax - iMasters Fóruns Página 6 de 31

}
}

Ajax.send = function(f, cb) {


var acao = f.action;
var metodo = f.method;

if(!acao) {
alert("Erro: o valor action do formulario não foi definido");
return false;
}

if(!metodo) {
alert("Erro: o método do formulário não foi definido");
return false;
} else
metodo = metodo.toLowerCase();

var send = new Array();


var elementos = f.elements;

for(var i = 0; i < elementos.length; i++) {


var e = elementos[i];
if(!e.name)
continue;
if(e.disabled)
continue;

var nVal = "";

for(var x = 0; x < e.value.length; x++) {


codeA = e.value.charCodeAt(x);
codeA = Ajax.dec2hex(codeA);
nVal += "%" + codeA;
}

var tipo = e.type.toLowerCase();

if(tipo != "checkbox" && tipo != "radio")


send[send.length] = e.name + "=" + nVal;
else if(e.checked)
send[send.length] = e.name + "=" + nVal;
}

send = send.join("&");

if(metodo == "post")
Ajax.open(acao, cb, send);
else

http://forum.imasters.com.br/index.php?showtopic=132737&st=20 29/5/2006
Ajax - iMasters Fóruns Página 7 de 31

Ajax.open(acao + "?" + send, cb);

return false;
}

Ajax.fastSelect = function(str, sep, obj) {


var clear = Ajax.fastSelect.arguments[3] ?
Ajax.fastSelect.arguments[3] : true;
obj = document.getElementById(obj).options;

var objs = str.split(sep);

if(clear)
while(obj.length > 0)
obj[0] = null;

var init = obj.length;

for(var i = 0; i < objs.length; i++) {


var x = i + init;
obj[x] = new Option(objs[i], objs[i]);
}
}
}

new Ajax();

oq essa API faz eh criar uma classe Javascript, chamada Ajax, apenas com metodos
estaticos (podem ser usados sem instanciar uma classe, isso eh um conceito de
Programacao Orientada a Objetos)

bem, vo explica cada metodo (funcao) agora:

Ajax.dec2hex(dec)
Essa funcao foi feita apenas para uso interno da classe, ela converte decimais (entre 0 e
255) em hexadecimal de 2 digitos (ex: A9)

Ajax.init()
essa funcao eh para inicializar o Ajax de forma cross-browser(de acordo com o browser
usado), ela pode ser usada como a funcao ajaxInit() q eu criei qdo inicei esse topico aki
no forum

Ajax.test()
funcao bem simples para verificar se o browser tem suporte a Ajax

Ajax.open(pag, cb)
essa eh a funcao que sera + usada por quem usar essa API, ela abre uma conexao Ajax
com o argumento pag, e depois envia a resposta para a funcao de callback (cb), no

http://forum.imasters.com.br/index.php?showtopic=132737&st=20 29/5/2006
Ajax - iMasters Fóruns Página 8 de 31

exemplo voces vao entender o seu uso

Ajax.send(f, cb)
essa funcao é usada para enviar formularios HTML por Ajax, facilitando o envio para uso
de cadastro ou outros formularios

Ajax.fastSelect(str, sep, obj)


essa funcao na verdade nao tem mto a ver com Ajax, mas eh uma funcao para
simplificar o uso de <select>, mto usado, principalmente nakele esquema: "selecione a
cidade para aparecer no select de baixo os bairros"

bom, esses sao os metodos da minha classe, agora vamos usala num exemplo simples:

consulta.php
CODE

<?

$a = $_GET['a'];

echo "+:" . ($a + 5);

?>

testeAjax.php
CODE

<html>
<head>
<title> teste ajax </title>
<script src="ajax.js"></script>
<script>

function get(e) {
return document.getElementById(e);
}

function somaCB(v) {
alert(v);
}

</script>
</head>
<body>
<input type="text" id="valor1"> <button type="button" onclick="Ajax.open
('consulta.php?a=' + get('valor1').value, 'somaCB');">Somar com
5</button>

http://forum.imasters.com.br/index.php?showtopic=132737&st=20 29/5/2006
Ajax - iMasters Fóruns Página 9 de 31

</body>
</html>

pronto, eh isso ai, como visto a API esconde akela complexidade do Ajax

vcs devem ter reparado algo estranho: "por que akele +: na string do echo no PHP?"

bem, para a minha API akilo quer dizer: "resposta OK";

ou seja, ele entende que tudo ocorreu como deveria. isso serve, por exemplo, vamos
mudar o arquivo consulta.php

consulta.php
CODE

<?

$a = $_GET['a'];

if(is_numeric($a))
echo "+:" . ($a + 5);
else
echo "-:O argumento nao eh numerico";

?>

bem, agora se a pessoa passar um argumento nao numerico, ele escreve -: oq significa
"erro esperado", e entao ele da um alert() no javascript com o erro

caso ele n encontre nem o +: nem o -: no inicio do retorno, ele vai considerar um "Erro
Fatal" e vai alertar o erro como um erro fatal

o argumento "a" foi passado por GET, ou seja, diretamente no nome do arquivo
("consulta.php?a=" + get('valor1').value)

a funcao get(e) que eu criei eh bem simples, eh soh pra diminiu o codigo na hora de
pegar um elemento via ID

se voce quizesse passar por POST o argumento "a", a diferenca seria pequena, ficaria
assim:

Ajax.open('consulta.php', 'somaCB', 'a=' + get('valor1').value);

pronto, o 3 argumento implicito seria o envio POST, vc pode usar os 2 ao mesmo tempo,
um exemplo simples abaixo para enviar GET e POST com varios argumentos em cada:

http://forum.imasters.com.br/index.php?showtopic=132737&st=20 29/5/2006
Ajax - iMasters Fóruns Página 10 de 31

Ajax.open("pagina.php?a=nome&b=cidade", "returno",
"c=nomeEmPost&d=cidadeEmPost");

pronto, chegaria do outro lado "a" e "b" por GET, e "c" e "d" por POST

vo t q da uma saida agora, + tarde eu volto pra posta exemplos com o Ajax.send() e
com o Ajax.fastSelect()

t+

--------------------
Wilker Web Chat versao 2.0 esta por vir

Informativo sobre WWC 2.0: http://200.199.74.253/site/pessoal/wilker/wwcinfo.php

Post #28
MalcomX Nov 22 2005, 07:02 PM

Dae Wilker, show de bola esse curso hein.....

Pois logo após o inicio do curso tem um colega que postou um código sobre um select no
banco, e se encontrasse o mesmo registro no BD ele mostraria a msg, mais não obtive
sucesso pode me ajudar...????

A unica coisa que acontece é que fica dando Not Found ...

Grupo: Membros
Posts: 10
Registrado: 26 Jan 2005
Onde posso ter errado...
De: Curitiba/Paraná
Membro nº: 15.929
CODE
<!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>Cadastro, consulta Ajax</title>
<script type="text/javascript" src="ajaxInit.js"></script>
<script type="text/javascript">
function verifica() {
var emailV = document.getElementById("con_email").value;
var ajax = ajaxInit();
ajax.open("GET", "consulta_db.php?con_email=" + emailV, true);

ajax.onreadystatechange = function() {
if(ajax.readyState == 4) {
if(ajax.status == 200) {
var retornoValor = ajax.responseText; //aqui vai ser o valor
0 ou 1, dependendo dele ter encontrado ou n

http://forum.imasters.com.br/index.php?showtopic=132737&st=20 29/5/2006
Ajax - iMasters Fóruns Página 11 de 31

if(retornoValor == "1") {
document.getElementById("msg").style.display="block";
}
} else {
alert("erro: " + ajax.statusText);
}
}
}
ajax.send(null); //essa foi a linha adicionada
}
</script>
<style type="text/css">
#msg {display: none}
</style>
</head>

<body>

<h2>Cadastre-se</h2>

<div id="msg"><p>Ufa! funfou o Ajax</p></div>

<form id="cadastro" method="get" >


<p>Nome: <input type="text" name="con_nome" id="con_nome" />
</p>
<p>E-mail: <input type="text" name="con_email" id="con_email" />
</p>
<p><button type="button" onclick="verifica();">Testar o Ajax</button></p>
</form>

</body>
</html>

Desde já agradeço....

Valeu

Nov 30 2005, 09:41 PM Post #29


thescente

Wilker

Seguinte eu to tentando entender o ajax, eu to tentando estudar mas ta meio


complicado.

Eu preciso fazer 2 combobox (select) em um deles irá carregar as marcas dos veículos e
ao
Grupo: Membros selecionar a marca "X" por exemplo, no combobox dos modelos irá carregar os veículos

http://forum.imasters.com.br/index.php?showtopic=132737&st=20 29/5/2006
Ajax - iMasters Fóruns Página 12 de 31

Posts: 268 da marca selecionada


Registrado: 26 Feb 2003
Membro nº: 609
Eu queria fazer isso para que a pagina nao fosse carregada sempre que selecionada uma
marca, e em javascript ele imprimi um codigo enorme na pagina....

Se no meu arquivo PHP eu fosse usar loop com while ou for como eu imprimiria esses
dados atras do ajax?

--------------------
Eron Venter
Site: http://www.shop4rodas.com.br || Em Breve

Dec 1 2005, 09:14 AM Post #30


Wilker

QUOTE(thescente @ Nov 30 2005, 09:41 PM)

Wilker

Seguinte eu to tentando entender o ajax, eu to tentando estudar mas ta meio


complicado.

Grupo: Membros
Posts: 517
Eu preciso fazer 2 combobox (select) em um deles irá carregar as marcas dos veículos
Registrado: 25 Aug 2004 e ao
De: Recife - PE selecionar a marca "X" por exemplo, no combobox dos modelos irá carregar os
Membro nº: 12.479
veículos da marca selecionada

Eu queria fazer isso para que a pagina nao fosse carregada sempre que selecionada
uma marca, e em javascript ele imprimi um codigo enorme na pagina....

Se no meu arquivo PHP eu fosse usar loop com while ou for como eu imprimiria esses
dados atras do ajax?

olha soh kra, n tem como vc passar um Array entre PHP e Javascript... pelo menos por
enquanto n existe essa compatibilidade, entao oq vc tem q fazer eh uma simulacao de
passagem de Array, vc faz assim:

1 - cria um Array no PHP e coloca todos os seus dados q serao passados separadamente
2 - na hora de imprimir na tela (pra chegar no JavaScript) vc da um implode usando um
separado q vc tenha certeza q n esta no conteudo (geralmente usa-se "|")
3 - no Javascript vc vai ler os dados separados por "|" (c vc usou isso)
4 - no Javascript vc faz:
meuArray = retorno.split("|");

ai vc vai gerar o Array no Javascript!!

logica:

http://forum.imasters.com.br/index.php?showtopic=132737&st=20 29/5/2006
Ajax - iMasters Fóruns Página 13 de 31

1 - criar um array
2 - concatenar com um separador (gerando uma string)
3 - pegar a string
4 - separar para voltar a ser um array

espero q tenha ajudado

--------------------
Wilker Web Chat versao 2.0 esta por vir

Informativo sobre WWC 2.0: http://200.199.74.253/site/pessoal/wilker/wwcinfo.php

Dec 5 2005, 09:02 PM Post #31


thescente

Olha só consegui um codigo de combos dinamicos com ajax, funciona, porem no


segundo combo ele imprime varios codigos junto, ja se eu separo o condigo em outro
php funciona....queria fazer numa mesma pagina nao eh possivel?

QUOTE

<?php
$con = mysql_connect("localhost", "root", "");
Grupo: Membros
Posts: 268 mysql_select_db("db_linhas");
Registrado: 26 Feb 2003
Membro nº: 609
if ($tipo == "consulta"){
$categoria = addslashes($_GET["id"]);
$consulta = mysql_query("SELECT * FROM subcategoria WHERE categoria =
'$categoria'");
$i=0;
while($row = mysql_fetch_assoc($consulta)){
echo $row["nome"] . "|" . $row["codigo"] . ",";
$i++;
}
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="javascript">
function pesquisar_dados( valor ){
http.open("GET", "combo2.php?tipo=consulta&id=" + valor, true);
http.onreadystatechange = handleHttpResponse;
http.send(null);
}

function handleHttpResponse(){
campo_select = document.forms[0].subcategoria;
if (http.readyState == 4) {
campo_select.options.length = 0;

http://forum.imasters.com.br/index.php?showtopic=132737&st=20 29/5/2006
Ajax - iMasters Fóruns Página 14 de 31

results = http.responseText.split(",");
for(i=0; i < results.length; i++){
string = results[i].split("|");
campo_select.options[i] = new Option( string[0], string[1] );
}
}
}

function getHTTPObject() {
var req;
try {
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
if (req.readyState == null) {
req.readyState = 1;
req.addEventListener("load", function () {
req.readyState = 4;
if (typeof req.onReadyStateChange == "function")
req.onReadyStateChange();
}, false);
}
return req;
}
if (window.ActiveXObject) {
var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
for (var i = 0; i < prefixes.length; i++) {
try {
req = new ActiveXObject(prefixes[i] + ".XmlHttp");
return req;
} catch (ex) {};
}
}
} catch (ex) {}
alert("XmlHttp Objects not supported by client browser");
}

var http = getHTTPObject();

</script>

</head>

<body>
<form name="formulario" method="post" action="">
<p><select name="categoria" onChange="pesquisar_dados( this.value )">
<option></option>
<?php
$consulta = mysql_query("SELECT * FROM categorias ORDER BY nome ASC");
while( $row = mysql_fetch_assoc($consulta) )

http://forum.imasters.com.br/index.php?showtopic=132737&st=20 29/5/2006
Ajax - iMasters Fóruns Página 15 de 31

{
echo "<option value=\"{$row['codigo']}\">{$row['nome']}</option>\n";
}
?>
</select></p>
<p><select name="subcategoria"></select>
</p>
</form>
</body>
</html>

--------------------
Eron Venter
Site: http://www.shop4rodas.com.br || Em Breve

Post #32
Thiago Viana Jan 2 2006, 05:02 PM

Olá a todos,

Este topico me ajudou muito. Parabens a todos os colaboradores!!!

Mas ainda tenho um problema por aqui, será que alguem me ajuda?
Grupo: Membros
Posts: 6
Registrado: 2 Jan 2006 Tenho a funcao ajaxInit identica a que foi postada:
Membro nº: 27.461
QUOTE

function ajaxInit() {
var req;

try {
req = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
try {
req = new ActiveXObject("Msxml2.XMLHTTP");
} catch(ex) {
try {
req = new XMLHttpRequest();
} catch(exc) {
alert("Esse browser não tem recursos para uso do Ajax");
req = null;
}
}
}

return req;
}

http://forum.imasters.com.br/index.php?showtopic=132737&st=20 29/5/2006
Ajax - iMasters Fóruns Página 16 de 31

Criei uma funcao generica para rodar o Ajax:

QUOTE

function loadAjax(sql) {
var valores;
var retorno;

ajax = ajaxInit();

if(ajax) {
ajax.open("GET", "ajax.asp?" + sql, true);
ajax.onreadystatechange = function() {
if(ajax.readyState == 4) {
if(ajax.status == 200) {
valores = ajax.responseText;
retorno = valores.split(";");
return retorno;
} else {
alert(ajax.statusText);
}
}
}
ajax.send(null);
}
}

E tenho tb uma funcao que vai ficar chamando o loadAjax passando os parametros que
eu quiser e retornando pra miha aplicacao montagens de selects dependetes de outros,
validacoes e etc:

QUOTE

function mostra() {
teste = loadAjax("sql=filial");
alert(teste);
}

Mas nao estou conseguindo fazer com que a funcao loadAjax retorne os valores que
foram pegos pelo ajax.responsetext. Alguem poderia me dar uma luz de como fazer

http://forum.imasters.com.br/index.php?showtopic=132737&st=20 29/5/2006
Ajax - iMasters Fóruns Página 17 de 31

isso?

Valeu pela atenção,

Abraco a todos!

Jan 3 2006, 10:22 AM Post #33


Wilker

assim desse jeito n da kra...

oq vc tem q fazer eh uma funcao de callback... e manda o script rodar ela depois q
concluir a requisicao

isso pq ele fica chamando o evento varias vezes (4 pra falar a verdade) e n da pra fazer
retorno nesse tipo de coisa
Grupo: Membros
Posts: 517 com gambiarras daria... mas ia ja eh outro assunto... e o script eh bem maior
Registrado: 25 Aug 2004
De: Recife - PE
Membro nº: 12.479 --------------------
Wilker Web Chat versao 2.0 esta por vir

Informativo sobre WWC 2.0: http://200.199.74.253/site/pessoal/wilker/wwcinfo.php

Jan 4 2006, 02:10 PM Post #34


Thiago Viana

Blz Wilker,

Valeu pela ajuda. Esta de parabens!

Grupo: Membros
Posts: 6
Registrado: 2 Jan 2006
Membro nº: 27.461

Jan 6 2006, 05:02 AM Post #35


Eclesiastes

Parabéns Wilker pela iniciativa!

Com suas explicações consegui pegar legal o AJAX, agora é só eu praticar.

Grupo: Moderadores
Posts: 758 Muito obrigado Wilker, estamos ae!
Registrado: 15 May 2005 []'s
De: Rio de Janeiro
Membro nº: 19.002

http://forum.imasters.com.br/index.php?showtopic=132737&st=20 29/5/2006
Ajax - iMasters Fóruns Página 18 de 31

--------------------
"A ninguém devais coisa alguma, senão o amor recíproco;
pois quem ama ao próximo tem cumprido a lei." (Romanos 13:8)

Feb 1 2006, 07:49 PM Post #36


Wilker

dei uma reformulada de leve na minha API (ta bom, n foi tao leve assim...) e vo reposta
ela aki, e vo da um exemplo de uso (fiquei devendo isso da ultima vez):

CODE
/*

***************************************
Grupo: Membros * Wilker Ajax API *
Posts: 517
* *
Registrado: 25 Aug 2004
De: Recife - PE
* Criador: Wilker Lúcio da Silva *
Membro nº: 12.479 * Ultima Modificação: 03/02/2006 *
* Descrição: API para simplificar *
* o uso de Ajax *
***************************************

*/

var Ajax = {
//metodo de inicializacao do Ajax
init: function() {
var req;

try {
//tenta carregar o Ajax no Internet Explorer
req = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
try {
//segunda tentativa para o Internet Explorer
req = new ActiveXObject("Microsoft.XMLHTTP");
} catch(ex) {
try {
//tenta carregar o Ajax no Mozilla / Netscape
req = new XMLHttpRequest();
} catch(exc) {
req = null;
}
}
}

return req;
},

http://forum.imasters.com.br/index.php?showtopic=132737&st=20 29/5/2006
Ajax - iMasters Fóruns Página 19 de 31

//metodo para abrir requisicao ao servidor e enviar o retorno para


uma funcao de callback
open: function(pag) {
var ajax = Ajax.init();

if(ajax) {
var openArgs = arguments[1];

if(openArgs && typeof openArgs == 'object') {


var sendCont = openArgs.post;
var cbArgs = openArgs.args;
var errorHandle = openArgs.error;
var cb = openArgs.callback;

if(typeof cbArgs == 'undefined')


cbArgs = null;

if(typeof errorHandle != 'function')


errorHandle = Ajax.defaultError;

if(typeof cb != 'function')
cb = null;
} else {
var cb = openArgs;
var sendCont = arguments[2] ? arguments[2] : null;
var cbArgs = arguments[3] ? arguments[3] : null;
var errorHandle = typeof arguments[4] == 'function' ?
arguments[4] : Ajax.defaultError;
}

if(sendCont) {
ajax.open("POST", pag, true);
ajax.setRequestHeader("Content-Type", "application/x-www-
form-urlencoded");
} else {
ajax.open("GET", pag, true);
}

ajax.onreadystatechange = function() {
if(ajax.readyState == 4) {
if(ajax.status == 200) {
var resp = ajax.responseText;
if(!resp) {
if(typeof cb == 'function')
cb(null, cbArgs);

return false;
}

http://forum.imasters.com.br/index.php?showtopic=132737&st=20 29/5/2006
Ajax - iMasters Fóruns Página 20 de 31

var st = resp.charAt(0);
var txt = resp.substring(2);

if(st == '+') {
if(typeof cb == 'function')
cb(txt, cbArgs);
} else if(st == '-') {
errorHandle(txt, false, cbArgs);
return false;
} else {
errorHandle(resp, true, cbArgs);
return false;
}
} else {
errorHandle(ajax.statusText, true, cbArgs);
return false;
}
}
}

ajax.send(sendCont);
}
},

//metodo para enviar formularios HTML


send: function(f) {
var sendArgs = arguments[1];

if(sendArgs && typeof sendArgs == 'object') {


var cbArgs = sendArgs.callback;
var errorHandle = sendArgs.error;
} else {
var cb = sendArgs;
var cbArgs = arguments[2] ? arguments[2] : null;
var errorHandle = typeof arguments[3] == 'function' ?
arguments[3] : null;
}

var acao = f.action;


var metodo = f.method;

if(!acao) {
alert("Erro: o valor action do formulario não foi definido");
return false;
}

if(!metodo) {
alert("Erro: o método do formulário não foi definido");

http://forum.imasters.com.br/index.php?showtopic=132737&st=20 29/5/2006
Ajax - iMasters Fóruns Página 21 de 31

return false;
} else
metodo = metodo.toLowerCase();

var send = new Array();


var elementos = f.elements;

for(var i = 0; i < elementos.length; i++) {


var e = elementos[i];
if(!e.name)
continue;
if(e.disabled)
continue;

var tipo = e.type.toLowerCase();

if(tipo != "checkbox" && tipo != "radio")


send[send.length] = e.name + "=" + escape(e.value);
else if(e.checked)
send[send.length] = e.name + "=" + escape(e.value);
}

send = send.join("&");

if(metodo == "post")
Ajax.open(acao, {callback: cb, post: send, args: cbArgs,
error: errorHandle});
else
Ajax.open(acao + "?" + send, {callback: cb, args: cbArgs,
error: errorHandle});

return false;
},

//metodo gerenciador de erros padrao da API


defaultError: function(msg, fatal) {
if(!fatal) {
alert("Erro: " + msg);
} else {
alert("Erro fatal: " + msg);
}
}
}

bom, quem olhar pra 1 versao, viu q a API mudou na hora de criacao, mas n foi soh
isso, no funcionamento / uso tb mudou (caracteristicas de beta neh galera =P)

ela tinha o modo antigo de passar o Ajax.open() q recebia ateh 5 argumentos diferentes,

http://forum.imasters.com.br/index.php?showtopic=132737&st=20 29/5/2006
Ajax - iMasters Fóruns Página 22 de 31

esse metodo ainda funciona dessa maneira (n tirei pra n prejudicar outras coisas q eu ja
fiz, mas futuramente isso sera removido da API)

modelo antigo:

exemplo1: Ajax.open("pagina.php", funcaoCallback, postArgs, cbArgs, errorHandle);

eram passados ateh 5 argumentos diferentes, e deveriam ser passados na ordem exata,
ou seja, c vc quizesse apenas passar a pagina para abrir e a funcao em caso de erros vc
deveria fazer:

exemplo2: Ajax.open("pagina.php", null, null, null, errorHandle);

agora, tirando o argumento da pagina a abrir(que é obrigatorio) o resto dos argumentos


sao passados como objeto, exemplo 1 na 2 forma:

Ajax.open("pagina.php", {callback: funcaoCallback, post: postArgs, args: cbArgs, error:


errorHandle});

e agora alguns diriam "mas o codigo usado foi maior!! qual a vantagem?"

vamos mostrar agora o exemplo 2 na 2 forma:

Ajax.open("pagina.php", {error: errorHandle});

viram? agora eu n precisei repassar todos os argumentos, agora soh eh preciso passar
os argumentos que forem usados, e em qq ordem, isso deixa o codigo mais legivel, mais
facil de lembrar, e + pratico na maioria das vezes (que voce nao usa todos os
argumentos)

agora eu vou dar um exemplo de uso, vo fazer algo que é muito pedido, o tal do
"selecione um combobox, e altere o proximo", usando um exemplo de softwares,
primeiro seleciona a categoria, e aparecem softwares no combo de baixo

vamos aos codigos =P

primeiro criem um arquivo chamado ajax.js com o conteudo do code que eu escrevi logo
no inicio

agora vamos a pagina PHP

consulta.php
CODE
<?

//headers para o browser


$gmtDate = gmdate("D, d M Y H:i:s");

header("Expires: {$gmtDate} GMT");

http://forum.imasters.com.br/index.php?showtopic=132737&st=20 29/5/2006
Ajax - iMasters Fóruns Página 23 de 31

header("Last-Modified: {$gmtDate} GMT");


header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");

//iniciar array que vai ter os programas


$softwares = array();

//iniciar array vazio e colocar elementos


$c = array();
$c[] = "Photoshop";
$c[] = "Fireworks";
$c[] = "Corel Draw";

$softwares["design"] = $c; //marcando esses softwares para a categoria


design

//reiniciar a variavel $c para criar uma nova categoria


$c = array();
$c[] = "Edit Plus";
$c[] = "Zend Editor";
$c[] = "Dreamweaver";

$softwares["editores"] = $c;

//agora mais uma categoria


$c = array();
$c[] = "Warcraft";
$c[] = "SilkRoad";
$c[] = "Priston Tale";
$c[] = "Ragnarok Online";
$c[] = "Need for Speed";
$c[] = "GTA";

$softwares["jogos"] = $c;

//ja temos os valores, vamos ver agora oque foi requisitado

$cat = $_GET["categoria"];

//vamos verificar se a categoria pedida existe


if(!array_key_exists($cat, $softwares)) {
die(utf8_encode("-:A categoria requisitada não foi encontrada"));
}

//caso exista vamos fazer ela se tornar uma string, usando um separador
para separar os valores, e depois escrever na tela
echo utf8_encode("+:" . implode("|", $softwares[$cat]));

?>

http://forum.imasters.com.br/index.php?showtopic=132737&st=20 29/5/2006
Ajax - iMasters Fóruns Página 24 de 31

ok ok, vamos la

voces devem ter percebido que na hora de anunciar o erro, eu coloquei um prefixo na
string de saida (no kso, foi o "-:"), isso diz para minha API de Ajax que ocorreu algum
"erro esperado"

ja depois, eu coloquei um "+:" com a saida de sucesso

a minha API usa isso para diferenciar um erro de um fator positivo

obs: caso o texto retornado seja vazio(nenhum caractere de saida) entao o resultado
será considerado POSITIVO, mas, se ouver qq coisa escrita, e n tiver nem o "+:" nem o
"-:" antes, entao será considerado um "erro inesperado" ou "erro fatal" q no kso seria
um erro PHP seu (parser error, erros normais, nao esperados)

o utf8_encode() presente nas respostas (tanto de erro qto de sucesso) serve para
corrigir um bug, q ocorre ao passar caracteres acentuados, se voce passar caracteres
acentuados sem usar essa funcao, eles vao chegar errado para o Javascript depois

o resto do codigo ta explicado nos comentarios, postem em caso de duvidas

agora vamos ao arquivo final:

pagina.html
CODE
<html
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-
1" />
<title>:: Select Carregador ::</title>
<script type="text/javascript" src="ajax.js"></script>
<script type="text/javascript">

//funcao simples para zerar um combo


function resetCombo(combo) {
while(combo.length > 0) {
combo.options[0] = null;
}
}

function buscar(categoria) {
resetCombo(document.getElementById("elementos")); //zerar o select
que será substituido (caso tenha algo)

if(categoria) { //verifica se o campo não é nulo, ou seja, é para


buscar algo
Ajax.open("consulta.php?categoria=" + categoria, {callback:

http://forum.imasters.com.br/index.php?showtopic=132737&st=20 29/5/2006
Ajax - iMasters Fóruns Página 25 de 31

buscarCB, error: buscarError});


} else {
document.getElementById("elementos").disabled = true; //desativar
segundo combo
}
}

function buscarCB(v) {
var e = document.getElementById("elementos"); //pegar combo que sera
trocado

var eles = v.split("|"); //nos anteriormente colamos os resultados


usando | e agora vamos separa-los novamente

for(var i = 0; i < eles.length; i++) { //passar por todos os


elementos
e.options[e.options.length] = new Option(eles[i], eles[i]);
}

e.disabled = false; //ativa o campo, caso esteja desativado


}

function buscarError(v) {
alert("Erro: " + v);

document.getElementById("elementos").disabled = true; //desativar


segundo select
}

</script>
</head>
<body>
<select onchange="buscar(this.value);">
<option value="">Selecione</option>
<option value="design">Design</option>
<option value="editores">Editores PHP</option>
<option value="jogos">Jogos</option>
<option value="cdssdc">Pra testar erro</option>
</select>
<br><br>
<select id="elementos" disabled="disabled"></select>
</body>
</html>

pronto galera, eh isso, joguem os 3 arquivos na mesma pasta e sejam felizes =P

vo da uma explicacao simples sobre esse uso, postem em caso de duvidas

http://forum.imasters.com.br/index.php?showtopic=132737&st=20 29/5/2006
Ajax - iMasters Fóruns Página 26 de 31

buscar(categoria)

no kso, ai eh aberta a conexao, ele manda a pagina com a categoria na QueryString


"consulta.php?categoria=" + categoria

ai como segundo argumentos nos passamos 1 objeto com 2 parametros:

{callback: buscaCB, error: buscaError}

no kso, nos avisamos para a API, que em caso de sucesso, deve ser executada a funcao
"buscaCB" (q foi definida logo abaixo), e em caso de erro deve ser executada a funcao
"buscaError" (q tb foi definida abaixo)

caso a funcao de sucesso nao seja definida, ele n vai fazer nada apos a requisicao (isso é
feito em casos que se quer apenas enviar dados para o servidor, sem receber)

caso a funcao de falha nao seja definida, a API tem uma "funcao padrao" para isso, que
da um alerta com o erro

na funcao de callback, deve-se definir 1 argumento, que vai receber a string de retorno

na funcao de erro, deve-se definir 2 argumentos, o 1 argumento contem o texto de erro,


o 2 argumento eh um valor booleano (true ou false) que diz se o erro foi "esperado" ou
"inesperado / fatal"

ai vc que sabe como vai tratar isso, afinal, o programador decide neh =P

bom galera, espero que tenham gostado, e repetindo: "postem em caso de duvidas"

hehehe, flw galera

--------------------
Wilker Web Chat versao 2.0 esta por vir

Informativo sobre WWC 2.0: http://200.199.74.253/site/pessoal/wilker/wwcinfo.php

Feb 4 2006, 08:46 PM Post #37


Fleury

Codificar no padrão UTF-8 no java script: url = escape(url);


Descodificar no padrão UTF-8 no java script: resposta = unescape(resposta);
Codificar no padrão UTF-8 no php: echo urlencode($resp)

http://forum.imasters.com.br/index.php?showforum=143
Be Happy, don't worry! xD

--------------------
Grupo: Moderadores
Lutando por uma internet sem idiotas.
Posts: 1.046
Registrado: 23 Feb 2005
De: Belo Horizonte

http://forum.imasters.com.br/index.php?showtopic=132737&st=20 29/5/2006
Ajax - iMasters Fóruns Página 27 de 31

Membro nº: 16.563

Feb 28 2006, 09:00 PM Post #38


Wilker

obs Fleury, n pode usar urlencode() assim no PHP n, pq ele converte todos os espacos
em + e troca alguns caracteres tb

pra usar da forma que vc falou, a funcao correta no PHP seria


rawurlencode($resp);

flw
Grupo: Membros
Posts: 517
--------------------
Registrado: 25 Aug 2004
Wilker Web Chat versao 2.0 esta por vir
De: Recife - PE
Membro nº: 12.479
Informativo sobre WWC 2.0: http://200.199.74.253/site/pessoal/wilker/wwcinfo.php

Mar 24 2006, 01:02 PM Post #39


Cazanova

Pessoal,
Dei uma lida e estou com um problema que nao consigo resolver, se vocês purem me
ajudar.

Tenho uma página: filtro.php que contém:


Grupo: Membros
Posts: 6
Registrado: 15 Dec 2005 CODE
Membro nº: 26.945
<html>
<head>
<title>Filtro</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-
8" >
<script language="JavaScript" type="text/javascript">
function Ajax() {
try {
return new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
try {
return new ActiveXObject("Msxml2.XMLHTTP");
} catch(ex) {
try {
return new XMLHttpRequest();
} catch(exc) {
return false;

http://forum.imasters.com.br/index.php?showtopic=132737&st=20 29/5/2006
Ajax - iMasters Fóruns Página 28 de 31

}
}
}
}
function resetCombo(combo) {
while(combo.length > 0) {
combo.options[0] = null;
}
}
function doReloadCidade(_value){

var ajax = Ajax();

//Monta a url com a uf


ajax.open("GET", "../scripts/retornaCidades.php?
idEstado="+_value+"",true);

ajax.onreadystatechange = function() {
if (ajax.readyState == 1) {

//limpa o select
var c = document.getElementById("idCidade")
resetCombo©;
c.options[0]=new Option("Aguarde","Aguarde")

}else if(ajax.readyState == 4) {
//limpa o select
var c = document.getElementById("idCidade")
resetCombo©;

var returnText = ajax.responseText.replace(/\+/g," ");


var aCidades = eval((returnText));

//popula o select com a lista de cidades obtida


for(var i=0; i<aCidades.length - 1; i++){

aCidades[i]=escape(aCidades[i])
c.options[c.options.length]=new Option(aCidades[i],
aCidades[i])
}
}
}
ajax.send(null);
}
</script>
</head>

<body>
Estado:

http://forum.imasters.com.br/index.php?showtopic=132737&st=20 29/5/2006
Ajax - iMasters Fóruns Página 29 de 31

<select name="idEstado" id="idEstado" size="1"


onChange="doReloadCidade(this.options[this.selectedIndex].value);">
<option value="" selected></option>
<option value="RS">RS</option>
<option value="SC">SC</option>
</select>
<BR><BR>
Cidade:
<select name="idCidade" id="idCidade" size="1" style="width:
152px;">
<option value="" selected></option>
</select>
</body>
</html>

Tenho outra que é retornaCidade.php que contém uma consulta que me retorna ['São
Sepe', 'Porto Alegre', 'Santo Ângelo', '' ]´

O grande problema são os acentos que não funcionam dentro do combo, só funciona se
colocar as palavras em ASCII Hex...

Tem solução, para não ter que colocar as palarvas em ASCII HEx no banco?

Att
Diego

Apr 2 2006, 11:31 AM Post #40


Carcleo

Olá pessoal, to precisando de uma ajuda ai:

É o seguite:
To fazendo um site de imobiliaria com um sistema de busca de imoveis da seguinte
forma:
Grupo: Membros
Posts: 315
Registrado: 25 Sep 2004 Tenho um formulario com 5 campos:
Membro nº: 13.173

2 radio buttons(ou option) para escolher entre compra ou aluguel


1 option para escolher o tipo de imovel que o cliente quer (casa, ap, lote...)
1 option para escolher o pais
1 option para escolher o estado
1 option para escolher o cidade
1 option para escolher o bairro
1 option para escolher o faixa de preco do imovel

Só que quando a pessoa escolher no radio button a opção(por exemplo) compra, é


criada uma variavel
php $Alugue_compre e ela vai receber o valor $Alugue_compre="compra", caso for
aluguel, $Alugue_compre="alugue".

http://forum.imasters.com.br/index.php?showtopic=132737&st=20 29/5/2006
Ajax - iMasters Fóruns Página 30 de 31

Depois desta variavel, sera feito uma busca no banco MySql para preencher o primeiro
option com os tipos de imoveis que teem disponiveis na tabela compra ou na tabela
alugue conforme a escolha da pessoa.

Depois sera preenchido o OPTION que contem os paises disponiveis.

Ao selecionar o país, sera feito uma busca no banco MySql para preencher o segundo
option com os estados dispoiveis para aquele pais que contem casa para alugar ou
vender conforme a escolha da pessoa.

Ao selecionar o estado, sera feito uma busca no banco MySql para preencher o terceiro
option com as cidades dispoiveis para aquele estado que contem casa para alugar ou
vender conforme a escolha da pessoa.

Ao selecionar cidade, sera feito uma busca no banco MySql para preencher o quarto
option com os bairros dispoiveis para aquela cidade que contem casa para alugar ou
vender conforme a escolha da pessoa.

Ao selecionar o bairro, sera feito uma busca no banco MySql para preencher o quinto
option com as faixas de valores disponiveis para aqueles disponiveis para alugar ou
vender conforme a escolha da pessoa.

A minha dificuldade é essa como usar os eventos no php.

Obrigado pessoa!

Carlos Rocha

Digite palavras-chave Buscar no tópico « Próximo mais velho — Cursos — Próximo mais novo »

3 Páginas < 1 2 3 >

1 usuário(s) está(ão) lendo este tópico (0 visitantes e 0 usuários anônimos)

1 membros: Waldemiro

|---- Cursos Ok

Redes de Proteção Brasil - redes de proteçao p/ apartamento


tel (011) 6197.0707 www.brasilprotecoes.com.br
Anúncios Google Anuncie neste site

http://forum.imasters.com.br/index.php?showtopic=132737&st=20 29/5/2006
Ajax - iMasters Fóruns Página 31 de 31

Versão Simples Horário: 29 May 2006 - 07:58 PM

Invision Power Board v2.1.6 © 2006 IPS, Inc.


Licensed to: iMasters

http://forum.imasters.com.br/index.php?showtopic=132737&st=20 29/5/2006

Você também pode gostar