Hola, tengo un script de contacto en árabe que usa Ajax para recuperar una respuesta del servidor después de completar el formulario.¿Por qué jQuery.parseJSON() no funciona en todos los servidores?
En algunos servidores apache, jQuery.parseJSON()
arroja una excepción invalid json
para el mismo json que analiza perfectamente en otros servidores. Esta excepción se produce solo en Chrome y IE.
El contenido json se codifica utilizando la función json_encode()
de php. Intenté enviar el encabezado correcto con los datos json y configurar el Unicode en utf-8, pero eso no ayudó.
Ésta es una de las respuestas JSON que trato de analizar (eliminado la segunda parte de si, porque es largo):
{"pageTitle":"\u062e\u0637\u0623 \u0639\u0646\u062f \u0627\u0644\u0625\u0631\u0633\u0627\u0644 !"}
Nota: Este lenguaje de estos datos es el árabe, por eso se ve así después de haber sido analizado con php's json_encode()
.
Puede intentar hacer una solicitud en los ejemplos dados y ver los datos de respuesta completos usando las herramientas de desarrollador firebug o webkit. ¡La respuesta pasa jsonlint!
Finalmente, tengo dos direcciones URL que usan la misma versión de la secuencia de comandos, trato de buscarlas usando Chrome o IE para ver el error en el ejemplo roto.
El ejemplo de trabajo: http://namodg.com/n/
El ejemplo rota: http://www.mt-is.co.cc/my/call-me/
Actualizado: Para aclarar más, me gustaría señalar que me manejadas para solucionar este problema mediante el uso de la vieja eval()
para analizar el contenido, publiqué otra versión con esta corrección, fue así:
// Parse the JSON data
try
{
// Use jquery's default parser
data = $.parseJSON(data);
}
catch(e)
{
/*
* Fix a bug where strange unicode chars in the json data makes the jQuery
* parseJSON() throw an error (only on some servers), by using the old eval() - slower though!
*/
data = eval("(" + data + ")");
}
Todavía quiero saber si esto es un error en el método parseJSON()
de jquery, por lo que puedo reportarlo.
No encuentro ningún caso de eval o parseJSON en ninguno de los dos ejemplos. ¿Puede darnos una pista de la ubicación donde se analiza el JSON? Además, su ejemplo analiza bien con jQuery.parse en cromo – phihag
Lancé otra versión 1.3.1 que usa 'eval()', puede verla aquí: http://namodg.com/try (Está debajo del 'enviar 'método en namodg.main.js). parseJSON se usa automáticamente cuando '$ .ajax' dataType se establece en' json'. – Maher4Ever