Jump to content


Photo

Problema Para Exibir Texto


  • Faça o login para participar
15 replies to this topic

#1 possamai

possamai

    Loading Intelligence... :)

  • Usuários
  • 146 posts
  • Sexo:Masculino
  • Localidade:Toledo
  • Interesses:Programação, Website, Manutenção em computadores, quase tudo relacionado á Informática.

Posted 13/11/2007, 15:37

Olá Galera!!! Blza?

Bom.. estou começando a mexer com ajax agora, e estou tentando montar um sisteminha de chat entre 2 pessoas.
A teoria é, envia mensagem por formulário parao Banco, e numa div na mesma página atualizo ela através do ajax de 5 em 5 segundos, puxando do banco de dados as mensagens já salva.

Bom. No Firefox, ele está puxando tudo certinho, tanto pra enviar como para receber. No IE eu consigo enviar a mensagem, mais não está exibindo. E não aparece nenhum erro, ae não sei o que pode ser.

Segue códigos para intendimento:
Chat.php
<script type='text/javascript' src='ajax.js'></script>

function pesquisa() {
[i]// Pego id da pessoa com quem estou conversando e faço a busca pelas mensagens[/i]
	teste = <?php echo ''.$id.';'; ?>
	url = "mensagens.php?id="+teste;
	ajax(url);
}

function recursao(){
	setTimeout('pesquisa()', 1000);
	setTimeout('recursao()', 5000);
}
</script>

<body onLoad="recursao()">


<div id="retorno" style="width:400px; height:400px; background-color:#33CCFF;">
</div>

...
Aqui vem o form (não necessário para esse problema)
...

ajax.js
function ajax(url) {
req = null;

	if (window.XMLHttpRequest) {
		req = new XMLHttpRequest();
		req.onreadystatechange = processReqChange;
		req.open("GET",url,true);
		req.send(null);
	} else if (window.ActiveXObject) {
		req = new ActiveXObject("Microsoft.XMLHTTP");
		if (req) {
			req.onreadystatechange = processReqChange;
			req.open("GET",url,true);
			req.send();
		}
	}
}

function processReqChange() {
	if (req.readyState == 4) {
		if (req.status ==200) {
			document.getElementById('retorno').innerHTML = req.responseText;
		} else {
			alert("Houve um problema ao obter os dados:n" + req.statusText);
		}
	}
}

mensagens.php
<?php
	include "config.php";
	$id = $_GET['id'];
	
	
	$mensagens = mysql_query("SELECT * FROM cliente WHERE id='$id'");
		while($x = mysql_fetch_array($mensagens)){
			echo nl2br($x['mensagem']);
		}

?>

Como disse, no firefox ele está atualizando certinho, de 5 em 5 segundos, já no IE, não aparece nada.. fica parado, como se não chamasse o ajax pra carregar.

Alguém sabe o que pode ser?
Tenho a impressão que ele não está conseguindo criar o objeto XMLHttpRequest, só que não sei como testar se é isso realmente.. :wacko:

Desde já agradeço.
Flw... .o> .o/

Possamai
"Quem ri por último é retardado! (Ou tem "Lag")"
-----------------
Aprendendo PHP .. Javascript .. Ajax!

#2 Paulo André

Paulo André

    Why so serious?

  • Ex-Admins
  • 5114 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte - MG
  • Interesses:O.Q.F.J.?

Posted 14/11/2007, 07:22

Não entendi o motivo deste primeiro setTimeout() aí nesta sua função. :ponder:

BTW, experimente ter somente a função pesquisa() assim:

function pesquisa()
{
	// Pego id da pessoa com quem estou conversando e faço a busca pelas mensagens
	teste = <?php echo ''.$id.';'; ?>
	url = "mensagens.php?id="+teste;
	ajax(url);
	
	setTimeout('pesquisa()', 5000);
}

E no onload do <body> chamar ela.

Flws...
(y)Até mais
Paulo André G Rodrigues,
ex-administrador Fórum WMO.


www.CanalDev.com.br

#3 possamai

possamai

    Loading Intelligence... :)

  • Usuários
  • 146 posts
  • Sexo:Masculino
  • Localidade:Toledo
  • Interesses:Programação, Website, Manutenção em computadores, quase tudo relacionado á Informática.

Posted 14/11/2007, 09:30

Valeu ae PA pela ajuda.. ;) ..

Pior que eu não tinha pensado da sua maneira, que na verdade é a mesma que a minha..
A recursão seria pra ela chamar a pesquisa de 5 em 5 segundos.. que é o mesmo que o seu código.. hehehe..
Só que mesmo mudando da sua maneira, não funcionou.. no Firefox ele atualiza puxando do banco de 5 em 5 segundos.. no Ie não. :angry:

Teóricamente, a minha função faria a mesma que a sua, só que de uma maneira "mais feia e maior", certo?


Ae eu estava analisando meu código e comparando com o resultado no código fonte e percebi o seguinte:

Essa é minha função em java script:
function pesquisa() {
	teste = <?php echo $id.';'; ?>
	url = "mensagens.php?id="+teste;
	ajax(url);
	
	setTimeout('pesquisa()', 1000);
}

e no código fonte aparece o seguinte:
IE:
function pesquisa() {
	teste = '74';
		url = "mensagens.php?id="+teste;
	ajax(url);
	
	setTimeout('pesquisa()', 1000);
}
</script>

FF:
function pesquisa() {
	teste = 74;	
		url = "mensagens.php?id="+teste;
	ajax(url);
	
	setTimeout('pesquisa()', 1000);
}

no caso.. o erro não pode ser, pq quando o echo mostra o valor da $id, ele coloca as aspas simples?? '74' :huh:
Pq no FF ele não coloca aspas e no IE coloca? Pode ser isso?

Abração ae mano..

Valeu pela ajuda. (y)

Flws..
o> o/
Possamai
"Quem ri por último é retardado! (Ou tem "Lag")"
-----------------
Aprendendo PHP .. Javascript .. Ajax!

#4 Paulo André

Paulo André

    Why so serious?

  • Ex-Admins
  • 5114 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte - MG
  • Interesses:O.Q.F.J.?

Posted 14/11/2007, 09:48

O porquê eu não sei, mas você pode fazer uma tentativa convertendo esta suposta string do IE para inteiro assim:

teste = parseInt(<?php echo $id.';'; ?>)

Acho que não tem muito a ver não mas é uma tentativa. :)Até mais
Paulo André G Rodrigues,
ex-administrador Fórum WMO.


www.CanalDev.com.br

#5 § Kenshin §

§ Kenshin §

    I'm coming back...!

  • Usuários
  • 574 posts
  • Sexo:Masculino
  • Localidade:BA
  • Interesses:Sou fã de linguagens direcionadas para a web, como php, (x)html, xml, wml.
    Também gosto de webdesign e ultimamente tenho me dedicado mais a aprender css, mysql, javascript, ajax e actionscript.
    Trabalho com os programas Dreamweaver, Illustrator e Flash.

Posted 14/11/2007, 09:56

tente substituir as aspas simples por duplas:

teste = <?php echo "".$id.";"; ?>

verifique se ainda aparecem as aspas simples no ie.

vlws -_-
Web Developer / Web Designer / Information Architect
"Living to learn... learning to live!"
Useful links: Rules | Search

#6 possamai

possamai

    Loading Intelligence... :)

  • Usuários
  • 146 posts
  • Sexo:Masculino
  • Localidade:Toledo
  • Interesses:Programação, Website, Manutenção em computadores, quase tudo relacionado á Informática.

Posted 14/11/2007, 10:25

Valeu aos 2 pela ajuda..

Então.. das 2 maneiras não funcionaram... o IE aparece aspas simples, e o FF não aparece. No FF ele consegue puxar as mensagens e no IE não. :angry:

ahhh.. e PA eu tive que mudar o parse.. olha:
você colocou assim:
teste = parseInt(<?php echo $id.';'; ?>)

mais o certo seria isso né:
teste = parseInt(<?php echo $id; ?>);

da sua maneira ele iria retornar isso:
teste = parseInt('74';)
e com o ";" junto do número ele não converte não..

e só uma dúvida.. só parseInt funciona?? o certo não é Integer.parseInt(x) ??

Kenshin: Também fiz da sua maneira com aspas duplas, e mesmo assim retorna aspas simples.

Minha dúvida é, será que são as aspas que fazem o IE não reconhecer o código??
No título estão assim:
http://127.0.0.1/Help%20Desk/chat.php?id='75'

id='75' ... isso é motivo pra não funcionar?? :ponder:

Abraços galera.. valeu a força..

Flws..
Possamai
o> o/
"Quem ri por último é retardado! (Ou tem "Lag")"
-----------------
Aprendendo PHP .. Javascript .. Ajax!

#7 Paulo André

Paulo André

    Why so serious?

  • Ex-Admins
  • 5114 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte - MG
  • Interesses:O.Q.F.J.?

Posted 14/11/2007, 10:51

:blink:

E pra que estes apóstrofos na URL? Um tanto quanto desnecessário isto, não? Aliás, nunca vi passar valores desta maneira pela URL.

Flws...
(ok2) Até mais
Paulo André G Rodrigues,
ex-administrador Fórum WMO.


www.CanalDev.com.br

#8 § Kenshin §

§ Kenshin §

    I'm coming back...!

  • Usuários
  • 574 posts
  • Sexo:Masculino
  • Localidade:BA
  • Interesses:Sou fã de linguagens direcionadas para a web, como php, (x)html, xml, wml.
    Também gosto de webdesign e ultimamente tenho me dedicado mais a aprender css, mysql, javascript, ajax e actionscript.
    Trabalho com os programas Dreamweaver, Illustrator e Flash.

Posted 14/11/2007, 11:10

acho que nao pode usar aspas na url nao...
geralmente usa-se funcoes como urlencode / urldecode ou addslashes para alterar caracteres nao aceitos na url.
mas no seu caso acho que essa aspa nem deveria tai, ja que a id eh numerica

so pra testar, digite isso no navegador:

http://127.0.0.1/Help%20Desk/chat.php?id='75'

http://127.0.0.1/Hel.../chat.php?id=75

qual dos dois funcionou?
Web Developer / Web Designer / Information Architect
"Living to learn... learning to live!"
Useful links: Rules | Search

#9 possamai

possamai

    Loading Intelligence... :)

  • Usuários
  • 146 posts
  • Sexo:Masculino
  • Localidade:Toledo
  • Interesses:Programação, Website, Manutenção em computadores, quase tudo relacionado á Informática.

Posted 14/11/2007, 15:38

:blink:

E pra que estes apóstrofos na URL? Um tanto quanto desnecessário isto, não? Aliás, nunca vi passar valores desta maneira pela URL.

Flws...
(ok2)


Realmente Paulo.. sei que é desnecessário, tanto que é a primeira vez que vejo o IE, pegar ele com apóstrofos.

acho que nao pode usar aspas na url nao...
geralmente usa-se funcoes como urlencode / urldecode ou addslashes para alterar caracteres nao aceitos na url.
mas no seu caso acho que essa aspa nem deveria tai, ja que a id eh numerica

so pra testar, digite isso no navegador:

http://127.0.0.1/Help%20Desk/chat.php?id='75'

http://127.0.0.1/Hel.../chat.php?id=75

qual dos dois funcionou?


realmente.. tirando a aspa, ele funcionou na hora que atualizou, depois parou, não carregou mais.. to achando muito estranho.. :huh:


Bom.. como to vendo que ele ta enviando a URL errada, vou explicar qual a idéia do meu sistema e o erro antes disso então:
Quando o cliente entra no site.. ele gera uma id no banco, e seto o nome da session como a id dele.
Quando eu preciso verificar o cliente, eu seto a $id como a session dele assim:

$id = $_SESSION["cliente"];

e depois de verificar nos select´s necessários e comparações IF.. eu mando ele para a página em questão através do:
header("Location: chat.php?id=$id");

No firefox ele vai normal com a id sem as '75'... já no ie.. ele coloca isso no final.. intendem?

ae agora tenho 2 problemas..
1) Essa questão do $id com apóstrofos..
2) Mesmo se eu tirar os apóstrofos da URL.. o ajax não puxa as informações de 5 em 5 segundos..

Para mais fácil entendimento, estou anexando o projeto.
Obs.: Estou desenvolvendo para fins de estudo, então não reparem se o projeto não estiver "prático", ok? ;)

Desde já agradeço a prontidão do PA e kenshin na minha ajuda.. (y)
Abraços,
Possamai
o> o/

Bom pessoal.. ainda não descubri o que pode ser..

O que percebi, é que no IE ele demora cerca de uns 5 minutos pra atualizar.. enquanto no FF demora os 5 segundos certinho..

Tem algo a ver com o tempo setado? é em milisegundos certo?


==== Editando ====
Ainda não consegui fazer funcionar no IE, e pelo que percebi, ele ta demorando uns 5 minutos pra atualizar as informações.. muito estranho..
No FF ele funciona normal..

Alguém tem idéia?
===============

Abraços
Possamai
o> o/

Attached Files

  • Attached File  chat.zip   10.08KB   6 downloads

Edição feita por: possamai, 14/11/2007, 15:39.

"Quem ri por último é retardado! (Ou tem "Lag")"
-----------------
Aprendendo PHP .. Javascript .. Ajax!

#10 § Kenshin §

§ Kenshin §

    I'm coming back...!

  • Usuários
  • 574 posts
  • Sexo:Masculino
  • Localidade:BA
  • Interesses:Sou fã de linguagens direcionadas para a web, como php, (x)html, xml, wml.
    Também gosto de webdesign e ultimamente tenho me dedicado mais a aprender css, mysql, javascript, ajax e actionscript.
    Trabalho com os programas Dreamweaver, Illustrator e Flash.

Posted 14/11/2007, 22:28

header("Location: chat.php?id=".$id);


tente concatenar a variavel no header.

vlws B)
Web Developer / Web Designer / Information Architect
"Living to learn... learning to live!"
Useful links: Rules | Search

#11 possamai

possamai

    Loading Intelligence... :)

  • Usuários
  • 146 posts
  • Sexo:Masculino
  • Localidade:Toledo
  • Interesses:Programação, Website, Manutenção em computadores, quase tudo relacionado á Informática.

Posted 16/11/2007, 08:09

header("Location: chat.php?id=".$id);


tente concatenar a variavel no header.

vlws B)


Ae Kenshin.. concatenando funcionou.. ele tirou as aspas simples.. ;)
http://forum.wmonlin...uote-button.png
Inserir quote
Porém mesmo assim o ajax do IE, não ta atualizando o DIV com as mensanges.. <_< ... tá sóda! :unsure:


Outra coisa.. tentei esse esquema de concatenação para tirar aspas simples de outro link, mais dessa vez não foi.
olha o código:
$cliente = mysql_query("SELECT * FROM cliente WHERE status='1' ORDER by id ASC");
	while($x = mysql_fetch_array($cliente)){
		$id = $x['id'];
		echo '<p><a href="abre_chat.php?id='.$id;
		echo '">'.$x['nome'].'</a></td>';
	}

Na 4ª linha do código, eu alterei no final da maneira parecida com o header anterior, ae no código fonte aparece sem as aspas:
<p><a href="abre_chat.php?id=84">fsda</a>
só que quando acesso o link, ele abre a url com as aspas:
http://marcelo2/Help%20Desk/chat.php?id='84'


Vamos lá:
Resolvido 1 problema, mais ainda tenho outros 2:
1) Essa questão do $id com aspas simples nesse outro link..
2) Ajax não puxa as informações de 5 em 5 segundos no IE..

Gentemmmm, não me batam tá.. :boxing: :assobio: ..
Que vou aprender isso ae eu vo.. heheh (claro com ajuda de vocês)

Por enquanto muito obrigado pela força.
Abraços.
Possamai
o> o/

Edição feita por: possamai, 16/11/2007, 08:22.

"Quem ri por último é retardado! (Ou tem "Lag")"
-----------------
Aprendendo PHP .. Javascript .. Ajax!

#12 § Kenshin §

§ Kenshin §

    I'm coming back...!

  • Usuários
  • 574 posts
  • Sexo:Masculino
  • Localidade:BA
  • Interesses:Sou fã de linguagens direcionadas para a web, como php, (x)html, xml, wml.
    Também gosto de webdesign e ultimamente tenho me dedicado mais a aprender css, mysql, javascript, ajax e actionscript.
    Trabalho com os programas Dreamweaver, Illustrator e Flash.

Posted 17/11/2007, 08:11

calma, um ja foi, faltam "so" dois, rsrsrsrs

ae possamai, no link que o echo imprime tem o arquivo abre_chat.php, certo?
ja no link que ta imprimindo a id com aspas tem so chat.php.
nesse caso eh desse arquivo que tao vindo as aspas.
da uma olhada no codigo e se possivel posta aqui.

<p><a href="abre_chat.php?id=84">fsda</a>


http://marcelo2/Help%20Desk/chat.php?id='84'


vlws ^_^
Web Developer / Web Designer / Information Architect
"Living to learn... learning to live!"
Useful links: Rules | Search

#13 possamai

possamai

    Loading Intelligence... :)

  • Usuários
  • 146 posts
  • Sexo:Masculino
  • Localidade:Toledo
  • Interesses:Programação, Website, Manutenção em computadores, quase tudo relacionado á Informática.

Posted 19/11/2007, 15:36

Fala Kenshin..

issae... ponto pra vc.. (y)

O que estava dando erro era o outro header, que quando concatenado, voltou a funcionar.. :assobio:

Agora falta o problema principal..
Ajax não está atualizando no IE.

Olha os códigos que eu uso pra ele atualizar de 3 em 3 segundos (Lembrando: No FF funciona normal!).. Vou colocar o necessário:
chat.php
<script language="javascript" src="ajax.js" type='text/javascript'></script>

<script>
function pesquisa() {
	teste = <?php echo "".$id.";"; ?>
	url = "mensagens.php?id="+teste;
	ajax(url);

	
	setTimeout('pesquisa()', 3000);			 // Aqui eu chamo a função em 3 segundos.
}
</script>




<div id="retorno" style="width:400px; height:400px; background-color:#33CCFF; overflow:auto;">
</div>

<body onLoad="pesquisa()">

ajax.js
function ajax(url) {
req = null;

	if (window.XMLHttpRequest) {
		req = new XMLHttpRequest();
		req.onreadystatechange = processReqChange;
		req.open("GET",url,true);
		req.send(null);
	} else if (window.ActiveXObject) {
		req = new ActiveXObject("Microsoft.XMLHTTP");
		if (req) {
			req.onreadystatechange = processReqChange;
			req.open("GET",url,true);
			req.send();
		}
	}		
}

function processReqChange() {
	if (req.readyState == 4) {
		if (req.status ==200) {
			document.getElementById('retorno').innerHTML = req.responseText;
		} else {
			alert("Houve um problema ao obter os dados:n" + req.statusText);
		}
	}
}

mensagens.php
<?php
	include "config.php";
	$id = $_GET['id'];
	
	
	$mensagens = mysql_query("SELECT * FROM cliente WHERE id='$id'");
		while($x = mysql_fetch_array($mensagens)){
			echo nl2br($x['mensagem']);
		}

?>


Alguém tem alguma luz? :ponder:

Novamente, valeu ae Kenshin pela ajuda. ;)

Abraços,
Possamai
o> o/
"Quem ri por último é retardado! (Ou tem "Lag")"
-----------------
Aprendendo PHP .. Javascript .. Ajax!

#14 § Kenshin §

§ Kenshin §

    I'm coming back...!

  • Usuários
  • 574 posts
  • Sexo:Masculino
  • Localidade:BA
  • Interesses:Sou fã de linguagens direcionadas para a web, como php, (x)html, xml, wml.
    Também gosto de webdesign e ultimamente tenho me dedicado mais a aprender css, mysql, javascript, ajax e actionscript.
    Trabalho com os programas Dreamweaver, Illustrator e Flash.

Posted 07/01/2008, 23:06

cara, ja faz tanto tempo, q nem sei se ta valendo ainda, :mellow: , mas va la, to comecando a estudar ajax agora, ainda to chegando na metade da apostila.

tem uma funcao de validacao do xmlhttprequest mais completa que valida o ajax nao so de acordo com o ie, mas tambem de acordo com as versoes do ie.
eh isso mesmo, o ie ja gosta de andar fora das regras. <_<
alem de usar metodos diferentes para criar o objeto xmlhttprequest tambem usa metodos diferentes para diferentes versoes do ie.
da uma olhada neste artigo pra esclarecer melhor, depois eh so implementar sua funcao.
imagino que isso resolva seu problema.

a funcao fica mais ou menos assim:


quanto a funcao de tempo, veja se nao eh melhor usar a funcao setinterval() fora da funcao.
achei esse artigo aqui, pode ajudar.

<script>function pesquisa()	{	teste = <?=$id; ?>;	url = "mensagens.php?id="+teste;	ajax(url);	}	setInterval('pesquisa()', 3000);</script>

vlw ^_^
Web Developer / Web Designer / Information Architect
"Living to learn... learning to live!"
Useful links: Rules | Search

#15 luc_hcore

luc_hcore

    12 Horas

  • Usuários
  • 125 posts
  • Sexo:Não informado
  • Localidade:Fortaleza-CE

Posted 24/01/2008, 13:08

Aew possamai, vc conseguiu deixar certinho no IE cara? Tô com o mesmo problema aqui!!

Kenshin, fiz as alterações que vc disse... Mas o setInterval deixa o navegador lento até ele congelar, já a função do xmlhttprequest deixou tudo na mesma. :wacko:

No FF td cerinho.. Deve ser algo com o xmlhttprequest mesmo! Vou dá uma procurada pela net! Vlw!
A vida é a soma de suas escolhas.




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq