Drupal y jQuery 1.4.x : problemas con formato JSON

JP Juan Pablo Romero Juan Pablo Romero

Juan Pablo Romero

Software Engineer
2 min read.

La instalación por defecto de Drupal 6.x (último release 6.20) incluye jQuery versión 1.2.6 que aunque permite muchas funcionalidades, es una versión muy antigua (fué liberada en mayo de 2008). Al realizar la actualización a jQuery 1.4.4 (actual versión estable) no hay incovenientes con las funcionalidades javascript internas de Drupal, sin embargo si existe un problema cuando se emplea la función drupal_json al momento de intercambiar datos en formato JSON, por ejemplo para la ejecución de un método via AJAX.



Cuál es el problema ?

La forma en que se detectó el problema, ocurrió haciendo una serie de pruebas sobre una aplicación web que usaba la versión 1.3.2 de jQuery y al momento de actualizarla a jQuery 1.4.4, las funcionalidades que intercambiaban datos en formato JSON no funcionaban, pero lo más extraño es que no se reportaba ningún error,

firebug

mostraba un panorama totalmente normal. Revisando la sintáxis de las funciones relacionadas y buscando alguna diferencia entre versiones encontré algo bien interesante: (tomado de la página de jQuery -

http://api.jquery.com/jQuery.getJSON/

):



"Important: As of jQuery 1.4, if the JSON file contains a syntax error, the request will usually fail silently. Avoid frequent hand-editing of JSON data for this reason. JSON is a data-interchange format with syntax rules that are stricter than those of JavaScript's object literal notation. For example, all strings represented in JSON, whether they are properties or values, must be enclosed in double-quotes. For details on the JSON format, see http://json.org/."



Todo indicaba que el formato JSON tenía algún problema en su sintáxis. Pues bien, lo primero hacer un chequeo con la herramienta

http://www.jslint.com

y en efecto se encontraron varios errores de caracteres ilegales. Revisando más a fondo, el problema se encuentra en la función drupal_json, que realiza una serie de reemplazos para algunos caracteres especiales, pero que no son válidos según el estándar JSON (ver:

http://json.org

). Vaya problema !.



La solución

Desde luego, dejar de usar la función drupal_json (al parecer el problema ya fué solucionado en Drupal 7) y reemplazarla por la función nativa de php json_encode y hacer un cambio en las cabeceras, así:




.....
drupal_json($arreglo);
// cambiarlo por:
drupal_set_header('Content-Type: text/json; charset=utf-8');
echo json_encode($arreglo);
?>


Otra posible solución se documenta en la página

oficial de Drupal

, sin embargo involucra modificar código en el core, aunque es factible en el caso que se haga uso intenso de la función drupal_json.



Espero sirva de ayuda y ahorre un quebradero de cabeza.


Written by Juan Pablo Romero

JP Juan Pablo Romero Juan Pablo Romero

Juan Pablo designs and builds robust software solutions with a focus on performance and usability. His problem-solving skills and attention to detail ensure high-quality and efficient applications.

Newsletter

Subscribe to our newsletter:

Read more

Migrar repositorio SVN a GIT

Estos son los pasos para realizar la migración de un repositorio subversion a git:# Creamos el repositorio en el servidor rem...

1 min read.

Build Once. Own Forever.