Привет, у меня есть арабский скрипт, который использует Ajax для получения ответа от сервера после заполнения формы.
На некоторых серверах Apache jQuery.parseJSON()
выдает invalid json
исключение для того же json, которое он отлично анализирует на других серверах. Это исключение выдается только в Chrome и IE.
Содержимое json кодируется с использованием функции php json_encode()
. Я попытался отправить правильный заголовок с данными json и установить юникод в utf-8, но это не помогло.
Это один из ответов json, который я пытаюсь проанализировать (убрал вторую часть if, потому что он длинный):
{"pageTitle":"\u062e\u0637\u0623 \u0639\u0646\u062f \u0627\u0644\u0625\u0631\u0633\u0627\u0644 !"}
Примечание : этот язык этих данных является арабским, поэтому он выглядит так после разбора php json_encode()
.
Вы можете попытаться сделать запрос в приведенных ниже примерах и просмотреть полные данные ответов, используя инструменты разработчика firebug или webkit. Ответ проходит jsonlint !
Наконец, у меня есть два URL-адреса, использующих одну и ту же версию скрипта, попробуйте просмотреть их с помощью chrome или IE, чтобы увидеть ошибку в сломанном примере.
Рабочий пример : http://namodg.com/n/
Нерабочий пример : http://www.mt -is.co.cc / my / call-me /
Обновлено: Чтобы уточнить больше, я хотел бы отметить, что мне удалось исправить это, используя старый eval()
для анализа содержимого, я выпустил другую версию с этим исправлением, это было так :
// 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 + ")" );
}
Я все еще хочу знать, является ли это ошибкой в методе parseJSON()
jquery, чтобы я мог сообщить об этом им.