Problema con acentos en jquery Autocomplete
Posted By Dark
Date: Septiembre 8th, 2009
Category: JQuery
Hace unos días que he estado trabajando con el plugin Autocomplete de jquery, y me encontre con el pequeño problema de que no envía correctamente los caracteres acentuados. Para el caso las paginas html de la aplicación y los servlets estan codificados con “UTF-8″. Así que después de investigar un poco descubri que basta con modificar el plugin y agregar la opcion “type” con “POST” a la llamada ajax localizada en la funcion request tal como sigue:
function request(term, success, failure) { ... $.ajax({ mode: "abort", type:"POST", port: "autocomplete" + input.name, ...
Ya que el plugin no tiene definido el tipo, usa “GET” por defecto el cual no tiene establecido el Charset, por lo cual se generan problemas al buscar.
Pues eso es todo, espero que les sea de utilidad.
Enero 7th, 2010 at 11:58 am
Muchas gracias fiera, me estaba volviendo loco…la verdad es que tenía el mismo problema que tú y bueno. !Solucionado!. Pon publicidad en tu página para que pueda hacer click porque por esto te mereces algo amigo…jeje
Te añado a favoritos, me pasaré de vez en cuando a ver lo que pones.
Enero 7th, 2010 at 2:20 pm
Gracias por comentar y que bien que te sirvió. De lo de la publicidad habrá que platicarlo con los integrantes del equipo (jajaja)… Saludos
Enero 27th, 2010 at 1:07 pm
¡Muchísimas gracias! Tenía el mismo problema: al utilizar $.post me devolvía una cadena que planteaba problemas de reconocimiento en las búsquedas y ya me estaba volviendo loco.
Un saludo.
Enero 27th, 2010 at 2:20 pm
Gracias por comentar.
Saludos.
Febrero 3rd, 2010 at 10:17 am
Hola, que tal te escribo porque estoy desarrollando un sitio y si bien aún no me topé con el problema que vos decis supongo que en el corto plazo tendré ese problema ya que es sitio es en español.
Mi pregunta va diriga a como se hace para pasar parámetros cuando el método que se utiliza para envíar los datos es POST (tal como vos indicaste que se debería modificar el método). Ya que por defecto la forma que conozco, usando get es incluir el parámetro en la misma url que procesará la petición:
$(“#miTxt”).autocomplete(“fns/filtrarDatos.php?parametro=valor”, {
Pero esto es solo válido para Get.
Gracias desde ya
Febrero 3rd, 2010 at 10:50 am
Encontré la respuesta a mi duda asi que dejo el código por las dudas a alguien le sirva:
$(“miTxt”).autocomplete(“fns/filtrarDatos.php, {
minChars: 0,
max: 12,
extraParams: {
action: ‘autocompletarTxt’
}
});
Toda la magia esta en indicarle los parámetros que se desean sean procesados por el servlet dentro de extraParams:
La respusta la encontré en la página misma del plugin:
Dependencies between fields
Often one autocompleted field depends on the value of another field. In that case, the extraParams option can provide the necessary dynamic parameter:
Consider an example where the states-field reuses the value entered into the country field:
$(“#states”).autocomplete(url, {
extraParams: {
country: function() { return $(“#country”).val(); }
}
});
That way the serverside can return all states that have a country by that name.
http://docs.jquery.com/Plugins/Autocomplete#API_Documentation
Febrero 3rd, 2010 at 3:55 pm
Excelente, que bueno que encontraste la respuesta rápidamente y gracias por comentar
Febrero 6th, 2010 at 12:37 pm
6oC5FT ivrztvehmktr, [url=http://ejubcpbazrxe.com/]ejubcpbazrxe[/url], [link=http://bleatnbzpujq.com/]bleatnbzpujq[/link], http://exyjdpooetzj.com/
Mayo 12th, 2010 at 11:49 am
y no me pueden mostrar como es el servlet que envia los datos al autocomplete porfavor.
Se los agradeceria enormemente
Mayo 12th, 2010 at 11:51 am
y la clase ke hace la consulta a la base de datos
Gracias
Mayo 27th, 2010 at 8:24 am
Muy bueno, me sirvió de mucho lo de los acentos ya que también tenía el mismo problema. Como vez en mi sitio (www.glosarioit.com) también hizo Jquery Autocomplete.
Otra cosa, también me gustaria saber si se puede distinguir entre mayusculas y minusculas en el autocomplete, ya que en mi caso por ejemplo tengo un término llamado “com” y otro llamado “COM” y solo me tira el primero ya sea que este escribiendo en minuscula como en mayuscula, a mi me gustaría distinguir eso, si es que se puede.
Gracias.
Mayo 27th, 2010 at 9:02 am
De nuevo por aqui, hay alguna forma de que el usuario por ejemplo no tenga que poner acento a la palabra a buscar, o sea que me traiga ordenada alfabeticamente con o sin tilde, porque en mi caso si la palabra es con acento me estoy dando cuenta que no la trae.
Por ejemplo:
se escribe “ac” y me trae todo lo que empiece con esas dos letras pero si ya me escribe “acu” y solo tengo un término que empiece así y el mismo está con acento por ejemplo:”acústica”, no me lo trae porque el usuario no le puso acento.
Entonces la idea es que me traiga todo ordenado ya sea con o sin acento.
Bueno solo me fala solucionar esos dos problemas el que les dije arriba de mayusculas y minusculas y este de los acentos.
Gracias de nuevo.
Mayo 27th, 2010 at 11:13 am
Estimado Damian, los 2 problemas que planteas se resuelven practicamente de forma muy similar.
Estoy suponiendo que el sistema en el cual haces uso de los autocompletes, esta bajo el modelo MVC, por tanto independientemente de si esta en java o en php o en lo que sea, debaras tener un control que reciba y regrese los datos a la vista, y que tambien pasa los datos al modelo. En todo caso generalmente este trabajo es del modelo, propiamente dicho en la definición de la consultas a la base de datos:
Suponiendo que la Base de Datos sea Oracle (en caso de que no, hay equivalentes en cualquier otra):
1. Para el caso de las mayusculas y minusculas basta con especificar en la consulta la funcion UPPER, por ejemplo:
Select * from TABLA where UPPER(valor) like UPPER(#parametro#);2. El segundo caso es un poco mas complejo ya que hay que realizar una sustitución de caracteres:
INSTR(UPPER(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(valor,'á','a'),'é','e'),'í','i'),'ó','o'),'ú','u')),UPPER(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(#parametro#,'á','a'),'é','e'),'í','i'),'ó','o'),'ú','u')))>0
Con esta expresion se esta reeplazando cada caracter acentuado por su correspondiente sin acento, depues todo se pasa a mayusculas, por último, para este caso particular, se esta utilizando la funcion INSTR, porque se esta buscando la cadena parametro como subcadena de valor. Es decir, para que me regrese “Adrián” cuando escribo “án”.
La instrucción de remplazo de caracteres creo que tambien puede hacerse con expresiones regulares pero no vamos a tocar ese punto!!!
Por último, si no es el caso que el sistema este consultando una base de datos, o si es un autocomplete muy particular el que necesita tratamiento especial, entonces será el controlador el encargado de hacer todo el trabajo.
Espero que todo haya quedado claro. Cualquier duda, por aqui andamos
Mayo 28th, 2010 at 7:11 am
Buenisimo, muchas gracias. En mi caso utilizo SQL, voy a implementarlo para ver como queda y veo si hago lo de los acentos, si no lo dejo como está esa parte o sea aquellas palabras que van con acentos las dejo sin acentos y listo.
Saludos
Mayo 28th, 2010 at 8:19 am
Perdon de nuevo, pero me estoy dando cuenta que no me sirve de esa forma lo de mayusculas y minusculas porque por ejemplo si pongo la función para convertir a mayusculas me tira toda la lista en mayuscula y yo no quiero eso, por eso no lo necesito hacer en la consulta.
La idea es que se respete todo, o sea, si alguien quiero buscar “Router” este aparesca asi y no “ROUTER”.
Por eso pense que en el autocomplete me traiga tanto “com” como “COM” y no uno de los dos.
Capaz que había alguna opcion que se podía agregar al archivo “jquery.autocomplete.js” como se hizo con la de los acentos.
Gracias
Mayo 28th, 2010 at 3:36 pm
No se si estoy comprendiendo bien, pero por lo que creo el autocomplete te esta regresando todas las palabras en mayusculas?
Si es asi, es porque la funcion para pasar todo a mayusculas debe hacerse en el WHERE de la Consulta, mas no en el SELECT. Es decir, dicha funcion solo se aplica cuando se lleva a cabo la comparación, de taal maneraa que los resultados regresan tal cual esten en la base de datos.
Mayo 29th, 2010 at 7:30 am
La consulta según lo que me pasaste ahora me quedo así en SQL:
select Palabra from ABC where upper(Palabra) like upper(Palabra) union
select Palabra from BDProgramacion where upper(Palabra) like upper(Palabra) union
select Palabra from Multimedia where upper(Palabra) like upper(Palabra) union
select Palabra from Redes where upper(Palabra) like upper(Palabra)
Como vez uso union para traer todas las palabras de las distintas tablas, ya que no estan relacionadas, pero me sigue sin traer uno de los “COM” y solo me trae “com”.
Debe ser capaz, porque uno esta en una tabla y el otro en otra, entonces nunca pregunta por uno o por otro.
Probe también utilizando “all” despues del “union” pero si bien me trae todo, también me trae los que se repite y yo no quiero eso, solo que me traiga todos los distintos, o sea, por ejemplo “com”, “COM”, pero no si es “RED” Y “RED”. Que realmente diferencie entre minusculas y mayusculas.
Me parece que voy a tener que hacer un group by, el tema es como…jaja
Gracias de todas formas.
Mayo 30th, 2010 at 9:52 am
Bueno ya solucioné el tema de las mayúsculas y minúsculas dejo el código para el que le interese en SQL;
select Palabra COLLATE SQL_Latin1_General_Cp850_CS_AS AS Palabra from ABC
union
select Palabra COLLATE SQL_Latin1_General_Cp850_CS_AS AS Palabra from BDProgramacion
union
select Palabra COLLATE SQL_Latin1_General_Cp850_CS_AS AS Palabra from Multimedia
union
select Palabra COLLATE SQL_Latin1_General_Cp850_CS_AS AS Palabra from Redes
Solo me quedaría saber como solucionar lo de los acentos.