Foros del Web » Programando para Internet » Jquery »

Unespected end of input,(Javascript)

Estas en el tema de Unespected end of input,(Javascript) en el foro de Jquery en Foros del Web. Hola amig@s, no se si va aquí o en PHP porque tiene que ver con los 2 pero creo que aquí. Bueno os comento, para ...
  #1 (permalink)  
Antiguo 26/06/2015, 06:11
Avatar de Benderzuelo  
Fecha de Ingreso: mayo-2013
Ubicación: España
Mensajes: 223
Antigüedad: 10 años, 9 meses
Puntos: 5
Unespected end of input,(Javascript)

Hola amig@s,

no se si va aquí o en PHP porque tiene que ver con los 2 pero creo que aquí.

Bueno os comento, para cargar un listado en una página uso la función $.post() de Jquery para no recargar, y el php me devuelve un array con el listado y la paginación.
Código Javascript:
Ver original
  1. function listar(){
  2.  $.post(m_url, function(res){
  3.       var resultado = $.parseJSON(res);
  4.       $('#usersList').html(resultado['users']);
  5.       $('#paginacion').html(resultado['paginacion']);
  6.  });
  7. }

Yo se lo devuelvo a la función de Javascript mediante json_encode(array) desde PHP,

funciona, muestra resultados pero a veces sale el error del titulo y casca:

Unespected end of input

Al final después de darle miles de vueltas resulta que si antes de hacer el json_encode, codifico los resultados con utf8_encode no casca pero claro se me ven los caracteres extraños, y con una funcion de javascript simulo un utf8_decode con js.

Código PHP:
Ver original
  1. echo json_encode(array('ok'=>$elementosPorPagina, 'users'=>utf8_encode($us), 'paginacion'=>utf8_encode($paginacion)));

Pongo también la función decode de javascript por si a alguien le sirve, ya que funciona, la encontré por internet

Código Javascript:
Ver original
  1. function utf8_decode(str_data){
  2.     var tmp_arr = [],
  3.     i = 0,
  4.     ac = 0,
  5.     c1 = 0,
  6.     c2 = 0,
  7.     c3 = 0,
  8.     c4 = 0;
  9.    
  10.     str_data += '';
  11.  
  12.     while (i < str_data.length){
  13.         c1 = str_data.charCodeAt(i);
  14.         if (c1 <= 191){
  15.             tmp_arr[ac++] = String.fromCharCode(c1);
  16.             i++;
  17.         }else if(c1 <= 223){
  18.             c2 = str_data.charCodeAt(i + 1);
  19.             tmp_arr[ac++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));
  20.             i += 2;
  21.         }else if(c1 <= 239){
  22.         // http://en.wikipedia.org/wiki/UTF-8#Codepage_layout
  23.         c2 = str_data.charCodeAt(i + 1);
  24.         c3 = str_data.charCodeAt(i + 2);
  25.         tmp_arr[ac++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
  26.         i += 3;
  27.         }else{
  28.             c2 = str_data.charCodeAt(i + 1);
  29.             c3 = str_data.charCodeAt(i + 2);
  30.             c4 = str_data.charCodeAt(i + 3);
  31.             c1 = ((c1 & 7) << 18) | ((c2 & 63) << 12) | ((c3 & 63) << 6) | (c4 & 63);
  32.             c1 -= 0x10000;
  33.             tmp_arr[ac++] = String.fromCharCode(0xD800 | ((c1 >> 10) & 0x3FF));
  34.             tmp_arr[ac++] = String.fromCharCode(0xDC00 | (c1 & 0x3FF));
  35.             i += 4;
  36.         }
  37.     }
  38.     return tmp_arr.join('');
  39. }

Hasta aquí todo bien, me funcionaba bien, no se si es una chapuza porque no entiendo mucho de js pero la cuestión es que me funciona, pero hoy en otro proyecto me ha ocurrido lo mismo y al hacer el mismo proceso ahora los acentos los sustituye por un cuadradito pequeño por ejemplo:

Fernᮤez y se come tanto el caracter que lleva el acento como el siguiente y en algunos casos se come 3.

He probado de todo, he probado meterle una cabecera php con la codificación, he probado las metas y todo lo que he visto en otros posts parecidos buscando en el foro.

La cuestión es que me gustaría solucionarlo pero también si alguien me sabe orientar en saber si lo hago bien o si por el contrario resulta que se hace de otra manera, lo agradecería.

Muchas gracias por adelantado
  #2 (permalink)  
Antiguo 06/07/2015, 05:37
Avatar de Benderzuelo  
Fecha de Ingreso: mayo-2013
Ubicación: España
Mensajes: 223
Antigüedad: 10 años, 9 meses
Puntos: 5
Respuesta: Unespected end of input,(Javascript)

Entonces no tiene solución?
  #3 (permalink)  
Antiguo 06/07/2015, 14:39
Avatar de fegm_4  
Fecha de Ingreso: febrero-2013
Mensajes: 114
Antigüedad: 11 años, 1 mes
Puntos: 8
Respuesta: Unespected end of input,(Javascript)

Yo no me complico tanto. Coloca este header al comienzo del php que consultas
Código PHP:
Ver original
  1. header('Content-Type: text/html; charset=utf-8');

Y también debería ir en la clase que usas para consultar la BDD (asumiendo que no es la misma del php del ajax).

Si haces esto, no tienes que convertir nada. La respuesta la darías así:

Código PHP:
Ver original
  1. echo json_encode(array('ok'=>$elementosPorPagina, 'users'=>$us, 'paginacion'=>$paginacion));

Yo tuve este mismo problema y me saco canas verdes hasta que descubrí esto
__________________
--
Aqui fegm_4
  #4 (permalink)  
Antiguo 06/07/2015, 14:43
Avatar de fegm_4  
Fecha de Ingreso: febrero-2013
Mensajes: 114
Antigüedad: 11 años, 1 mes
Puntos: 8
Respuesta: Unespected end of input,(Javascript)

Por cierto, revisa el collation de la BDD
__________________
--
Aqui fegm_4
  #5 (permalink)  
Antiguo 07/07/2015, 02:54
Avatar de Benderzuelo  
Fecha de Ingreso: mayo-2013
Ubicación: España
Mensajes: 223
Antigüedad: 10 años, 9 meses
Puntos: 5
Respuesta: Unespected end of input,(Javascript)

Cita:
Iniciado por fegm_4 Ver Mensaje
Yo tuve este mismo problema y me saco canas verdes hasta que descubrí esto
Jejejeje, vale muchas gracias, creo que esto ya lo hice y no me funcionó, pero lo volveré a probar y te diré a ver qué resultados obtengo esta vez.

Etiquetas: end, funcion, html, input, javascript, js, página, php
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:02.