Привет, У меня есть сценарий контактов на арабском языке, который использует Ajax для получения ответа с сервера после заполнения формы.
На некоторых серверах apache jQuery.parseJSON ()
выдает недопустимый 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!"}
Примечание из этих данных арабский, что ' s почему это выглядит так после анализа с помощью 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 + ")" );
}
Я все еще хочу знать, ошибка ли это в jquery ' s parseJSON ()
, чтобы я мог сообщить им об этом.