Ir para o conteúdo

Publicidade

 Estatísticas do Fórum

  • 0 Usuários ativos

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

Cursos Online iMasters
Foto:

[Resolvido] Muito estranho - Erro de sintaxe

  • Por favor, faça o login para responder
15 respostas neste tópico

#1 Campecino

Campecino
  • Membros
  • 83 posts

Postado 27 agosto 2009 - 09:21

Bom dia pessoal

Aconteceu um negocio muito estranho, tenho usado a meses um código que busca o endereço pelo cep em
varias paginas, e dentro de arquivos diferentes.

Fiz uma adaptação dele para ser usado no blog também.

Bom, de ontem pra hoje todas as páginas que tem ele começaram a dar erro :unsure:

O erro que dá é erro de sintaxe:

var response = http.responseText;
eval("var arr = "+response); //cria objeto com o resultado - esta linha que da erro.

O estranho é que ele estava funcionando e eu nem mudei nada para ele parar de funcionar, será alguma atualização do IE ?

Obrigado a todos!
  • 0

#2 William Bruno

William Bruno

    Desenvolvedor FrontEnd

  • Moderadores Globais
  • 24.654 posts

Postado 27 agosto 2009 - 09:23

O eval com uma string dentro, não faz sentido pra mim..
var arr = eval(response); //cria objeto com o resultado - esta linha que da erro.

  • 0

#3 Campecino

Campecino
  • Membros
  • 83 posts

Postado 27 agosto 2009 - 09:35

Vlw pela dica, mas ainda não funcionou.

Segue meu código inteiro, da pra ter uma idéia melhor:

<script language="javascript">

function getHTTPObject() {
  var xmlhttp;
  if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
    try {
      xmlhttp = new XMLHttpRequest();
      } catch (e) {
      xmlhttp = false;
      }
    }
  return xmlhttp;
  }
var http = getHTTPObject();

function funcaowebservicecep() 
{
	http.open("GET", 'buscarendereco.php?cep='+document.getElementById("cep").value, true);
	http.onreadystatechange = handleHttpResponse;
	http.send(null);

	var arr; //array com os dados retornados
	function handleHttpResponse() 
	{
		if (http.readyState == 4) 
		{
			var response = http.responseText;
			eval("var arr = "+response); //cria objeto com o resultado
			document.getElementById("rua").value = arr.rua;
			document.getElementById("bairro").value = arr.bairro;
			document.getElementById("cidade").value = arr.cidade;
			document.getElementById("uf").value = arr.uf;
		}
	}
}
</script>

Vlw!
  • 0

#4 hinom

hinom
  • Banidos
  • 0 posts

Postado 27 agosto 2009 - 10:12

buscarendereco.php?cep=foo

certificou-se de que a requisição está retornando o valor esperado ?

#5 Campecino

Campecino
  • Membros
  • 83 posts

Postado 27 agosto 2009 - 10:57

Olá Hinom,

Fiz um teste com um cep qualquer e ta funcionando beleza,
buscarendereco.php?cep=13416-530

Resultado:

{"rua":"Avenida Brasil","bairro":"Jardim Europa","cidade":"Piracicaba","uf":"SP"}

Q sera q pode ser?
  • 0

#6 William Bruno

William Bruno

    Desenvolvedor FrontEnd

  • Moderadores Globais
  • 24.654 posts

Postado 27 agosto 2009 - 11:06

o formato de JSON que conheço, não coloca aspas nas 'variáveis':
[{rua:"Avenida Brasil", bairro:"Jardim Europa", cidade:"Piracicaba", uf:"SP"}]
veja:
var foo = '[ {rua:"Avenida Brasil", bairro:"Jardim Europa", cidade:"Piracicaba", uf:"SP"} ]';
			var arr = eval(foo);
			alert(arr[0].rua+' - '+arr[0].bairro+' - '+arr[0].cidade+' - '+arr[0].uf);
além do [ começando e o ] terminando a sintaxe.
  • 0

#7 Campecino

Campecino
  • Membros
  • 83 posts

Postado 27 agosto 2009 - 13:07

Boa tarde!

Acho que estou no caminho, usei as dicas do Willian

No buscarendereco.php?cep=13416-530
Esta assim
 [{rua:"Avenida Brasil", bairro:"Jardim Europa", cidade:"Piracicaba", uf:"SP"}] 

E o script esta assim:

<script language="javascript">
function getHTTPObject() {
  var xmlhttp;
  if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
    try {
      xmlhttp = new XMLHttpRequest();
      } catch (e) {
      xmlhttp = false;
      }
    }
  return xmlhttp;
  }
var http = getHTTPObject();
function funcaowebservicecep() 
{
	http.open("GET", 'buscarendereco.php?cep='+document.getElementById("cep").value, true);
	http.onreadystatechange = handleHttpResponse;
	http.send(null);

	var arr; //array com os dados retornados
	function handleHttpResponse() 
	{
		if (http.readyState == 4) 
		{
			var response = http.responseText;
			var foo = +response;
			var arr = eval(foo);
			document.getElementById("rua").value = arr.rua;
			document.getElementById("bairro").value = arr.bairro;
			document.getElementById("cidade").value = arr.cidade;
			document.getElementById("uf").value = arr.uf;
		}
	}
}
</script>

Agora pelo mesnos saiu o erro de sintaxe, :) , mas os dados não estão sendo puxados, nos campos que era para aparecer a rua, cidade, etc, aparece: undefined.

Falta pouco? Ou ta mais errado ainda? Vlw!
  • 0

#8 hinom

hinom
  • Banidos
  • 0 posts

Postado 27 agosto 2009 - 13:15

para esse caso específico, recomendo uso do jquery-min

consulte:
http://forum.imaster...__fromsearch__1

#9 Campecino

Campecino
  • Membros
  • 83 posts

Postado 27 agosto 2009 - 13:46

Hinom, obrigado pela dica,

Mas eu não entendo jquery, e muito pouco de javascript :( , sei só PHP, teria como você me explicar melhor como posso junta uma coisa na outra?

Obrigado.
  • 0

#10 hinom

hinom
  • Banidos
  • 0 posts

Postado 27 agosto 2009 - 15:11

o exemplo está no link acima..

o unico requisito é fazer o download do "jquery-min".

faça download no site do jquery

a versão "-min" é uma versão compacta.

#11 Campecino

Campecino
  • Membros
  • 83 posts

Postado 27 agosto 2009 - 15:32

Olá Hinom, eu pexei mas não consegui fazer funcionar direito, veja o pé que ta a coisa:

    <html>
    <title>jquery test</title>
    <head>
	<script language="javascript" src="jquery-1.3.2.min.js"></script>
<script language="javascript">
function funcaowebservicecep() 
{
	jQuery.get( 'buscarendereco.php?cep='+document.getElementById("cep").value, true);, function(data) {									            document.getElementById("rua").value = arr.rua;
			document.getElementById("bairro").value = arr.bairro;
			document.getElementById("cidade").value = arr.cidade;
			document.getElementById("uf").value = arr.uf;     
	},'json');
}
</script>
        </head>
        <body> 
<table>
      <tr>
        <td align="left"><strong>CEP:</strong></td>
        <td align="left"><input size="15" name="cep" id="cep"  class="campform1" value="" onblur="funcaowebservicecep()" /> <strong>&nbsp;&nbsp;&nbsp;<a href="javascript:buscacep();">Buscar CEP</a></strong></td>
        <td colspan="2" align="left">&nbsp;</td>
      </tr>
      <tr>
        <td align="left" bgcolor="#F2F2F2"><strong>Endere&ccedil;o (Rua):</strong></td>
        <td align="left" bgcolor="#F2F2F2"><input value="" size="35" name="rua" id="rua" class="campform1" /></td>
        <td width="110" align="left" bgcolor="#F2F2F2">&nbsp;<strong>&nbsp;N&uacute;mero:</strong>&nbsp;&nbsp;&nbsp;</td>
        <td width="83" align="left" bgcolor="#F2F2F2"><input id="numero" size="5" name="numero" class="campform1" /></td>
      </tr>
      <tr>
        <td align="left"><strong>Bairro:</strong></td>
        <td align="left"><input size="35" name="bairro" id="bairro" class="campform1" value="" /></td>
        <td align="left"><strong>&nbsp;<strong>&nbsp;</strong>Complemento:</strong>&nbsp;</td>
        <td align="left"><input size="5" name="complemento" id="complemento" class="campform1" /></td>
      </tr>
      <tr>
        <td align="left" bgcolor="#F2F2F2"><strong>Cidade:</strong></td>
        <td colspan="3" align="left" bgcolor="#F2F2F2"><input type="text" size="18" name="cidade" id="cidade" class="campform1" value="" maxlength="50" />          
          - <strong>UF:
          <input class="campform1" name="uf" id="uf" value="" size="8" maxlength="3"/>
          </strong></td>
      </tr>
</table>
               </body>
               </html>

No buscar endereço tenho essa resposta:

{"rua":"Avenida Brasil","bairro":"Jardim Europa","cidade":"Piracicaba","uf":"SP"}

O seu exemplo funcionou direitinho, mas não consegui adaptar para o que eu preciso,,

Esse código ai de cima passou perto ou ta muito longe da solução?

Vlw!
  • 0

#12 hinom

hinom
  • Banidos
  • 0 posts

Postado 27 agosto 2009 - 15:55

nesse trecho:
jQuery.get( 'buscarendereco.php?cep='+document.getElementById("cep").value, true);, function(data) {									            document.getElementById("rua").value = arr.rua;
			document.getElementById("bairro").value = arr.bairro;
			document.getElementById("cidade").value = arr.cidade;
			document.getElementById("uf").value = arr.uf;     
	},'json');

na primeira linha, observe em negrito:

jQuery.get( 'buscarendereco.php?cep='+document.getElementById("cep").value, true);, function(data) {



errado (em negrito):

document.getElementById("rua").value = arr.rua;



correção:

document.getElementById("rua").value = data.rua;



entendeu onde deve corrigir ?


obs: podem existir outros erros, entretanto, corrija esses erros primeiramente.


correção
jQuery.get( 'buscarendereco.php?cep='+document.getElementById("cep").value, true);, function(data) {	

alert( data.rua ); // esse alert serve apaenas para testar se está retornando o valor esperado

                        document.getElementById("rua").value = data.rua;
			document.getElementById("bairro").value = data.bairro;
			document.getElementById("cidade").value = data.cidade;
			document.getElementById("uf").value = data.uf;     
	},'json');



após fazer essas modificações, lembre de esvaziar o cache do browser e é recomendável fechar a janela e abrir uma nova, pois possui scripts client-side, os quais ficam armazenados no cache do browser.

#13 Campecino

Campecino
  • Membros
  • 83 posts

Postado 27 agosto 2009 - 16:18

Ola Hinom, obrigado pela ajuda,

Fiz como você falou, agora os erros diminuiram, só tem 2.

Quando entro na página aparece o seguinte erro:

Mensagem: Erro de sintaxe
Linha: 8
Caractere: 91
Código: 0

Linha 8 ->
        jQuery.get( 'buscarendereco.php?cep='+document.getElementById("cep").value, true);, function(data) {   

E depois que utilizo o form de buscar cep aparece o seguinte:

Mensagem: Objeto esperado
Linha: 22
Caractere: 1
Código: 0

Linha 22 ->
 <td align="left"><input size="15" name="cep" id="cep"  class="campform1" value="" onBlur="funcaowebservicecep()" /> <strong>&nbsp;&nbsp;&nbsp;<a href="javascript:buscacep();">Buscar CEP</a></strong></td>

Obs: O alert não funcionou, tem idéia do que pode ser? Vlw!
  • 0

#14 Campecino

Campecino
  • Membros
  • 83 posts

Postado 27 agosto 2009 - 18:04

Ola, fiz um novo teste, parece que agora esta no caminho:

Código:

<script language="javascript">
function funcaowebservicecep() 
{
		jQuery.get( 'buscarendereco.php?cep=13416-530', function(data) {   
		alert("Data Loaded: " + data);
		document.getElementById("rua").value = data.rua; 
		document.getElementById("bairro").value = data.bairro;
		document.getElementById("cidade").value = data.cidade; 
		document.getElementById("uf").value = data.uf;             
		},'json');  
}
</script>

O erro é, nos campos que é para ser preenchido, ele insere undefined, e no alert de teste aparece o seguinte:
Imagem postada

Alguem sabe? Vlw!
  • 0

#15 Campecino

Campecino
  • Membros
  • 83 posts

Postado 27 agosto 2009 - 19:15

Problema resolvido, pode fechar o topico!

Solução:

<script language="javascript">

function getHTTPObject() {
  var xmlhttp;
  if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
    try {
      xmlhttp = new XMLHttpRequest();
      } catch (e) {
      xmlhttp = false;
      }
    }
  return xmlhttp;
  }
var http = getHTTPObject();

function funcaowebservicecep() 
{
	http.open("GET", 'buscarendereco.php?cep='+document.getElementById("cep").value, true);
	http.onreadystatechange = handleHttpResponse;
	http.send(null);

	var arr; //array com os dados retornados
	function handleHttpResponse() 
	{
		
		if (http.readyState == 4) 
		{
			var response = http.responseText;
			var arr = eval(response);
			document.getElementById("rua").value = arr[0].rua;
			document.getElementById("bairro").value = arr[0].bairro;
			document.getElementById("cidade").value = arr[0].cidade;
			document.getElementById("uf").value = arr[0].uf;
		}
	}
}
</script>

Obrigado a todos que ajudaram :joia:
  • 0

#16 William Bruno

William Bruno

    Desenvolvedor FrontEnd

  • Moderadores Globais
  • 24.654 posts

Postado 28 agosto 2009 - 09:30

o formato de JSON que conheço, não coloca aspas nas 'variáveis':

[{rua:"Avenida Brasil", bairro:"Jardim Europa", cidade:"Piracicaba", uf:"SP"}]
veja:
var foo = '[ {rua:"Avenida Brasil", bairro:"Jardim Europa", cidade:"Piracicaba", uf:"SP"} ]';
			var arr = eval(foo);
			alert(arr[0].rua+' - '+arr[0].bairro+' - '+arr[0].cidade+' - '+arr[0].uf);
além do [ começando e o ] terminando a sintaxe.

^_^
Que bom que resolveu.. mas dá uma olhada ali.. eu já tinha colocado o certo.. com o 'arr[0].campo'
  • 0




Publicidade

/ins>