Delicious Grupos de usuários F.A.Q. Regras Busca Membros
Painel de Controle � Ver Novos Posts � Meu Assistente � 0 Novas Mensagens
iMasters Fóruns » Programação » PHP » Cursos
iMasters Home
Logado como: Waldemiro ( Sair )
3 Páginas < 1 2 3 >
Ajax, o novo mundo client-server Opções
marcinhha Post #21 Sep 30 2005, 12:49 PM
Grupo: Moderadores Posts: 922
Registrado: 13 Apr 2005
Membro nº: 17.806
Tou tentando fazer o script de verificar quantos usuários estão online..
Tou com o seguinte erro:
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..."
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CODE
Fatal error: Call to undefined function: file_put_c ontents()
in /home/www/des.abaco.com.br/www2/suporte/ajax/use rsCount.php on line 40
usuários online
red neck * Post #22 Oct 1 2005, 07:19 AM
so sei que nao sei nada
essa func só foi adicionada no php5, troque ela por:
QUOTE
$fopen = fopen($fileName, "w+");
Página 1 de 31Ajax - iMasters Fóruns
29/5/2006http://forum.imasters.com.br/index.php?showtopic=132737&st=20
Grupo: Membros
Posts: 951
Registrado: 9 Mar 2005
Membro nº: 16.874
fwrite($fopen, implode("|", $newUsers));
fclose($fopen);
acaba dando no mesmo
-------------------- ~/ A procura do programa perfeito ! /~
matlorenzo Post #23 Oct 7 2005, 01:24 PM
Grupo: Membros
Posts: 31 Registrado: 29 Jul 2005
Membro nº: 21.921
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?
Alex Souza Post #24 Oct 27 2005, 05:32 PM
Grupo: Membros
Posts: 1
Registrado: 27 Oct 2005
Membro nº: 25.069
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.
Falow !
Prarabéns !
Wilker Post #25 Nov 16 2005, 05:29 PM
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?
Página 2 de 31Ajax - iMasters Fóruns
29/5/2006http://forum.imasters.com.br/index.php?showtopic=132737&st=20
Grupo: Membros Posts: 517
Registrado: 25 Aug 2004
De: Recife - PE
Membro nº: 12.479
faz tempo q eu n apareco por aki
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
MUTANTE_POWER_B Post #26 Nov 17 2005, 01:55 PM
Grupo: Membros Posts: 568
Registrado: 24 Feb 2003
De: Rio de Janeiro
Membro nº: 188
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
http://www.mutantepower.com.br http://www.phpavancado.net *NOVO*
Leia as documentações:
http://br.php.net/ http://www.mysql.com/
bot de IRC em PHP?
http://mpbot.sf.net/
Página 3 de 31Ajax - iMasters Fóruns
29/5/2006http://forum.imasters.com.br/index.php?showtopic=132737&st=20
Dúvidas *Avançadas* de PHP???
Entre no canal #PHPAvancado da rede Brasnet de IRC.
Wilker Post #27 Nov 17 2005, 02:53 PM
Grupo: Membros
Posts: 517
Registrado: 25 Aug 2004
De: Recife - PE Membro nº: 12.479
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
CODE
function Ajax() {
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.XMLH TTP");
} catch(e) {
try {
req = new ActiveXObject("Msxml2.XML HTTP");
} catch(ex) {
try {
req = new XMLHttpRequest();
} catch(exc) {
req = null;
}
}
}
return req;
}
Ajax.test = function() {
if(Ajax.init())
return true;
Página 4 de 31Ajax - iMasters Fóruns
29/5/2006http://forum.imasters.com.br/index.php?showtopic=132737&st=20
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.responseTex t;
if(!resp) {
return false;
}
var st = resp.charAt(0);
var txt = resp.substring(2) ;
if(st == '+') {
if(cb)
eval(cb + '("' + tx t + '")');
} 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);
Página 5 de 31Ajax - iMasters Fóruns
29/5/2006http://forum.imasters.com.br/index.php?showtopic=132737&st=20
}
}
Ajax.send = function(f, cb) {
var acao = f.action;
var metodo = f.method;
if(!acao) {
alert("Erro: o valor action do formular io 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
Página 6 de 31Ajax - iMasters Fóruns
29/5/2006http://forum.imasters.com.br/index.php?showtopic=132737&st=20
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
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();
Página 7 de 31Ajax - iMasters Fóruns
29/5/2006http://forum.imasters.com.br/index.php?showtopic=132737&st=20
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
testeAjax.php
CODE
<?
$a = $_GET['a'];
echo "+:" . ($a + 5);
?>
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="butto n" onclick="Ajax.open
('consulta.php?a=' + get('valor1').value, 'somaCB') ;">Somar com
5</button>
Página 8 de 31Ajax - iMasters Fóruns
29/5/2006http://forum.imasters.com.br/index.php?showtopic=132737&st=20
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
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:
</body>
</html>
CODE
<?
$a = $_GET['a'];
if(is_numeric($a))
echo "+:" . ($a + 5);
else
echo "-:O argumento nao eh numerico";
?>
Página 9 de 31Ajax - iMasters Fóruns
29/5/2006http://forum.imasters.com.br/index.php?showtopic=132737&st=20
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
MalcomXPost #28
Nov 22 2005, 07:02 PM
Grupo: Membros
Posts: 10 Registrado: 26 Jan 2005
De: Curitiba/Paraná
Membro nº: 15.929
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 ...
Onde posso ter errado...
CODE
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transi tional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitiona l.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").v alue;
var ajax = ajaxInit();
ajax.open("GET", "consulta_db.php?con_email=" + ema ilV, 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
Página 10 de 31Ajax - iMasters Fóruns
29/5/2006http://forum.imasters.com.br/index.php?showtopic=132737&st=20
Desde já agradeço....
Valeu
if(retornoValor == "1") {
document.getElementById("msg").styl e.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();">Test ar o Ajax</button></p>
</form>
</body>
</html>
thescente Post #29 Nov 30 2005, 09:41 PM
Grupo: Membros
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
selecionar a marca "X" por exemplo, no combobox dos modelos irá carregar os veículos
Página 11 de 31Ajax - iMasters Fóruns
29/5/2006http://forum.imasters.com.br/index.php?showtopic=132737&st=20
Posts: 268 Registrado: 26 Feb 2003
Membro nº: 609
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? -------------------- Eron Venter
Site: http://www.shop4rodas.com.br || Em Breve
Wilker Post #30 Dec 1 2005, 09:14 AM
Grupo: Membros
Posts: 517
Registrado: 25 Aug 2004 De: Recife - PE
Membro nº: 12.479
QUOTE(thescente @ Nov 30 2005, 09:41 PM)
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
selecionar a marca "X" por exemplo, no combobox dos modelos irá carregar os
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:
Página 12 de 31Ajax - iMasters Fóruns
29/5/2006http://forum.imasters.com.br/index.php?showtopic=132737&st=20
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
thescente Post #31 Dec 5 2005, 09:02 PM
Grupo: Membros
Posts: 268 Registrado: 26 Feb 2003
Membro nº: 609
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", "");
mysql_select_db("db_linhas");
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;
Página 13 de 31Ajax - iMasters Fóruns
29/5/2006http://forum.imasters.com.br/index.php?showtopic=132737&st=20
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) )
Página 14 de 31Ajax - iMasters Fóruns
29/5/2006http://forum.imasters.com.br/index.php?showtopic=132737&st=20
{
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
Thiago VianaPost #32
Jan 2 2006, 05:02 PM
Grupo: Membros
Posts: 6
Registrado: 2 Jan 2006 Membro nº: 27.461
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?
Tenho a funcao ajaxInit identica a que foi postada:
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;
}
Página 15 de 31Ajax - iMasters Fóruns
29/5/2006http://forum.imasters.com.br/index.php?showtopic=132737&st=20
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
Página 16 de 31Ajax - iMasters Fóruns
29/5/2006http://forum.imasters.com.br/index.php?showtopic=132737&st=20
isso?
Valeu pela atenção,
Abraco a todos!
Wilker Post #33 Jan 3 2006, 10:22 AM
Grupo: Membros
Posts: 517 Registrado: 25 Aug 2004
De: Recife - PE
Membro nº: 12.479
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
com gambiarras daria... mas ia ja eh outro assunto... e o script eh bem maior -------------------- Wilker Web Chat versao 2.0 esta por vir
Informativo sobre WWC 2.0: http://200.199.74.253/site/pessoal/wilker/wwcinfo.php
Thiago Viana Post #34 Jan 4 2006, 02:10 PM
Grupo: Membros
Posts: 6 Registrado: 2 Jan 2006
Membro nº: 27.461
Blz Wilker,
Valeu pela ajuda. Esta de parabens!
Eclesiastes Post #35 Jan 6 2006, 05:02 AM
Grupo: Moderadores
Posts: 758
Registrado: 15 May 2005 De: Rio de Janeiro
Membro nº: 19.002
Parabéns Wilker pela iniciativa!
Com suas explicações consegui pegar legal o AJAX, agora é só eu praticar.
Muito obrigado Wilker, estamos ae!
[]'s
Página 17 de 31Ajax - iMasters Fóruns
29/5/2006http://forum.imasters.com.br/index.php?showtopic=132737&st=20
-------------------- "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)
Wilker Post #36 Feb 1 2006, 07:49 PM
Grupo: Membros
Posts: 517
Registrado: 25 Aug 2004
De: Recife - PE Membro nº: 12.479
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
/*
***************************************
* Wilker Ajax API *
* *
* Criador: Wilker Lúcio da Silva *
* 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 Exp lorer
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 Mozi lla / Netscape
req = new XMLHttpRequest();
} catch(exc) {
req = null;
}
}
}
return req;
},
Página 18 de 31Ajax - iMasters Fóruns
29/5/2006http://forum.imasters.com.br/index.php?showtopic=132737&st=20
//metodo para abrir requisicao ao servidor e en viar o retorno para
uma funcao de callback
open: function(pag) {
var ajax = Ajax.init();
if(ajax) {
var openArgs = arguments[1];
if(openArgs && typeof openArgs == 'obje ct') {
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] ? argum ents[2] : null;
var cbArgs = arguments[3] ? argumen ts[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.responseTex t;
if(!resp) {
if(typeof cb == 'functi on')
cb(null, cbArgs);
return false;
}
Página 19 de 31Ajax - iMasters Fóruns
29/5/2006http://forum.imasters.com.br/index.php?showtopic=132737&st=20
var st = resp.charAt(0);
var txt = resp.substring(2) ;
if(st == '+') {
if(typeof cb == 'functi on')
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 formular io não foi definido");
return false;
}
if(!metodo) {
alert("Erro: o método do formulário não foi definido");
Página 20 de 31Ajax - iMasters Fóruns
29/5/2006http://forum.imasters.com.br/index.php?showtopic=132737&st=20
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,
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: se nd, 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);
}
}
}
Página 21 de 31Ajax - iMasters Fóruns
29/5/2006http://forum.imasters.com.br/index.php?showtopic=132737&st=20
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");
Página 22 de 31Ajax - iMasters Fóruns
29/5/2006http://forum.imasters.com.br/index.php?showtopic=132737&st=20
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 softwar es para a categoria
design
//reiniciar a variavel $c para criar uma nova categ oria
$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 req uisitado
$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[$ca t]));
?>
Página 23 de 31Ajax - iMasters Fóruns
29/5/2006http://forum.imasters.com.br/index.php?showtopic=132737&st=20
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"></scri pt>
<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 é nul o, ou seja, é para
buscar algo
Ajax.open("consulta.php?categoria=" + categ oria, {callback:
Página 24 de 31Ajax - iMasters Fóruns
29/5/2006http://forum.imasters.com.br/index.php?showtopic=132737&st=20
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
buscarCB, error: buscarError});
} else {
document.getElementById("elementos").disabl ed = true; //desativar
segundo combo
}
}
function buscarCB(v) {
var e = document.getElementById("elementos"); / /pegar combo que sera
trocado
var eles = v.split("|"); //nos anteriormente co lamos 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(el es[i], eles[i]);
}
e.disabled = false; //ativa o campo, caso estej a 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>
Página 25 de 31Ajax - iMasters Fóruns
29/5/2006http://forum.imasters.com.br/index.php?showtopic=132737&st=20
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
Fleury Post #37 Feb 4 2006, 08:46 PM
Be Happy, don't worry!
Grupo: Moderadores
Posts: 1.046 Registrado: 23 Feb 2005
De: Belo Horizonte
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
xD -------------------- Lutando por uma internet sem idiotas.
Página 26 de 31Ajax - iMasters Fóruns
29/5/2006http://forum.imasters.com.br/index.php?showtopic=132737&st=20
Membro nº: 16.563
Wilker Post #38 Feb 28 2006, 09:00 PM
Grupo: Membros
Posts: 517
Registrado: 25 Aug 2004
De: Recife - PE Membro nº: 12.479
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 -------------------- Wilker Web Chat versao 2.0 esta por vir
Informativo sobre WWC 2.0: http://200.199.74.253/site/pessoal/wilker/wwcinfo.php
Cazanova Post #39 Mar 24 2006, 01:02 PM
Grupo: Membros Posts: 6
Registrado: 15 Dec 2005
Membro nº: 26.945
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:
CODE
<html>
<head>
<title>Filtro</title>
<meta http-equiv="Content-Type" content="te xt/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.XMLHTT P");
} catch(ex) {
try {
return new XMLHttpRequest();
} catch(exc) {
return false;
Página 27 de 31Ajax - iMasters Fóruns
29/5/2006http://forum.imasters.com.br/index.php?showtopic=132737&st=20
}
}
}
}
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("idCida de")
resetCombo©;
c.options[0]=new Option("Aguarde","Agua rde")
}else if(ajax.readyState == 4) {
//limpa o select
var c = document.getElementById("idCida de")
resetCombo©;
var returnText = ajax.responseText.repl ace(/\+/g," ");
var aCidades = eval((returnText));
//popula o select com a lista de cidade s obtida
for(var i=0; i<aCidades.length - 1; i++ ){
aCidades[i]=escape(aCidades[i])
c.options[c.options.length]=new Opt ion(aCidades[i],
aCidades[i])
}
}
}
ajax.send(null);
}
</script>
</head>
<body>
Estado:
Página 28 de 31Ajax - iMasters Fóruns
29/5/2006http://forum.imasters.com.br/index.php?showtopic=132737&st=20
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
<select name="idEstado" id="idEstado" size= "1"
onChange="doReloadCidade(this.options[this.selected Index].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>
Carcleo Post #40 Apr 2 2006, 11:31 AM
Grupo: Membros
Posts: 315 Registrado: 25 Sep 2004
Membro nº: 13.173
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:
Tenho um formulario com 5 campos:
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".
Página 29 de 31Ajax - iMasters Fóruns
29/5/2006http://forum.imasters.com.br/index.php?showtopic=132737&st=20
1 usuário(s) está(ão) lendo este tópico (0 visitantes e 0 usuários anônimos)
1 membros: Waldemiro
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
« Próximo mais velho � Cursos � Próximo mais novo »Digite palavras-chave Buscar no tópico
3 Páginas < 1 2 3 >
|---- 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
Página 30 de 31Ajax - iMasters Fóruns
29/5/2006http://forum.imasters.com.br/index.php?showtopic=132737&st=20
Top Related