Publicidade

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Campecino

[Resolvido] Muito estranho - Erro de sintaxe

Patrocínio:

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

buscarendereco.php?cep=foo

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

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

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>   <a href="javascript:buscacep();">Buscar CEP</a></strong></td>
        <td colspan="2" align="left"> </td>
      </tr>
      <tr>
        <td align="left" bgcolor="#F2F2F2"><strong>Endereç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"> <strong> Número:</strong>   </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> <strong> </strong>Complemento:</strong> </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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

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>   <a href="javascript:buscacep();">Buscar CEP</a></strong></td>

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

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites