Ir para conteúdo

POWERED BY:

Arquivado

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

Cazanova

Problemas com caracteres Ajax

Recommended Posts

Pessoal,

 

Estou com um problema com caracteres ASCII Hex, e não se como arrumar.

Primeiro:

Tenho uma base de dados Access, com uma lista de cidades.

Segundo:

 

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;	  }	}  }}function doReloadCidade(_value){	var ajax = Ajax();	//Monta a url com a uf	ajax.open("GET", "../scripts/retornaCidades.asp?idEstado="+_value+"",true);	ajax.onreadystatechange = function() {		if (ajax.readyState == 1) {					//limpa o select			var c = document.getElementById("idCidade")			while(c.options.length>0)c.options[0]=null				c.options[0]=new Option("Aguarde","Aguarde")						}else if(ajax.readyState == 4) {			//limpa o select			var c = document.getElementById("idCidade")			while(c.options.length>0)				c.options[0] = null						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]=unescape(aCidades[i])					c.options[c.options.length]=new Option(aCidades[i], aCidades[i])			}						}	}	ajax.send(null);}
A consulta de "../scripts/retornaCidades.asp?idEstado="+_value+"", me retorna ['Uberlândia', 'porto alegre']

só que os acentos que estão no banco não são processados corretamente, sáo funciona se colocar ['Uberl%E2ndia', 'porto alegre']

 

Existe alguma forma de tratar essas palavras?

 

Abraço

Diego

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para o ajax funcionar corretamente com os acentos, você tem que codificar o texto gerado pelo asp em UTF-8 para o JS descodifica-los posteriormente.Olhe no fórum de asp alguma coisa que faça isso.No php é urlencode(texto);No jsp é URLEncoder.encode(texto);[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

var resposta = unescape(nomeDoSeuAjax.responseText).replace(/\+/g," ");

Compartilhar este post


Link para o post
Compartilhar em outros sites

o proprio Javascript recomenda na hora de codificar você usar a funcao encodeURIComponent() pois a funcao escape() esta ultrapassada, eu na verdade n gostei de nenhum deles... o encodeURIComponent faz ateh legal, mas tem caracteres q ele erra na hora de passar, o escape() quase funciona, pois ele n codifica alguns caracteres (como o +, você ja tento enviar um + com ajax?) entao eu akbei fazendo minha funcao de escape... ta ai pra quem quizer:

 

function escapeAll(string) {	var decHex = function(dec) {		var chars = '0123456789ABCDEF';				return chars.charAt(Math.floor(dec / 16)) + chars.charAt(dec % 16);	};		var out = '';		for(var i = 0; i < string.length; i++) {		var code = string.charCodeAt(i);				if(code > 255)			out += '%3F'; //coloca uma interrogacao caso o caractere seja desconhecido		else			out += '%' + decHex(code);	}		return out;}

ela codifica TODOS os caracteres, realmente, isso triplica o tamanho do texto, mas pelo menos garante que os dados vao chegar...

Compartilhar este post


Link para o post
Compartilhar em outros sites

legal...

no script daki do forum usa esse:

ajax_request.prototype.encodeurl = function( url ){	//-------------------------------	// Ensure we have a string	//-------------------------------		url = url.toString();	var regcheck = url.match(/[\x90-\xFF]/g);		if ( regcheck )	{		for (var i = 0; i < i.length; i++)		{			url = url.replace(regcheck[i], '%u00' + (regcheck[i].charCodeAt(0) & 0xFF).toString(16).toUpperCase());		}	}	return escape(url).replace(/\+/g, "%2B");}

Eu pessoalmente nunca precisei de mais que escape e unescape...

Nunca tive problemas com caracteres desconhecidos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

legal...no script daki do forum usa esse:

ajax_request.prototype.encodeurl = function( url ){	//-------------------------------	// Ensure we have a string	//-------------------------------		url = url.toString();	var regcheck = url.match(/[\x90-\xFF]/g);		if ( regcheck )	{		for (var i = 0; i < i.length; i++)		{			url = url.replace(regcheck[i], '%u00' + (regcheck[i].charCodeAt(0) & 0xFF).toString(16).toUpperCase());		}	}	return escape(url).replace(/\+/g, "%2B");}
Eu pessoalmente nunca precisei de mais que escape e unescape...Nunca tive problemas com caracteres desconhecidos.
Qualquer uma destas funçoes que colocaram aqui, eu utilizei para fazer o unescape da string, e nao retorna nada.com a 1ªfunçao, utilizei: var xmldata=escapeAll(this.ajaxobj.responseText);com a 2ª:Encoder = new ajax();this.contentdiv.innerHTML=Encoder.encodeurl(xmldata)Mas quando vou ver o resultado...nada aparece...Alguma sugestao?

Compartilhar este post


Link para o post
Compartilhar em outros sites
var xmldata=escapeAll(this.ajaxobj.responseText);
o que você tá fazendo com esse código é CODIFICAR e não descodificar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu to usando o codigo que nosso amigo Fleury passou e até agora ta beleza...eu até ia criar um topico aki mas ta susso agora

 

func abaixo

 

function url_escape(url) {	url = url.toString();	var regcheck = url.match(/[\x90-\xFF]/g);  	if ( regcheck )	{		for (var i = 0; i < i.length; i++)		{			url = url.replace(regcheck[i], '%u00' + (regcheck[i].charCodeAt(0) & 0xFF).toString(16).toUpperCase());		}	}	return escape(url).replace(/\+/g, "%2B");}

 

pra chamar é url_escape('alaallalalala a al alaaa a')

 

resolveu tudo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Defina o Charset no ASP...Na página .asp, que retornará os valores ao AJAX, é necessário definir o charset utilizado ou codificar todas as respostas.Para codificar as respostas, pode utilizar Server.HTMLEncode(TextodeResposta). Isso deverá ser feito em cada texto que queira retornar.Para simplificar o processo, sugiro colocar nas primeiras linhas da página ASP a seguinte instrução:response.Charset = "iso-8859-1"Isso informará através do header http o conjunto de caracteres utilizado e orientará o javascript como exibi-los. Dessa forma não é necessário fazer o Unscape sugerido nas outras respostas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.