Javascript / JQuery - JSON.stringify не работает в Windows Phone 7 - PullRequest
1 голос
/ 06 октября 2011

Я тестирую мобильный веб-сайт на Windows Phone 7, и функция JSON.stringify не работает. Кто-нибудь знает, почему это может происходить или что я могу сделать, чтобы решить эту проблему? Я строю массив для того, чтобы сохранить его в куки. Это мой код:

vString = JSON.stringify(vehicleArray);
alert ('this alert will never execute');
$j.cookie('vehicleCookie', vString, { expires: 7, path: '/' }); //Store all the vehicles again to the cookie

Любой код за пределами строки vString перестает выполняться.

VehicleArray выглядит следующим образом, если зарегистрировано:

["145", "273", "241", "553", "490", "380"]

Я не могу предоставить много информации о том, что работает или не работает, потому что в Windows Phone нет какого-либо отладчика, о котором я знаю, и код отлично работает в ie7.

Ответы [ 3 ]

5 голосов
/ 06 октября 2011

Вы можете расширить jQuery, чтобы дать ему функцию jQuery.stringify().

Это минимизировано для экономии места:

jQuery.extend({stringify:function(a){var c=typeof a;if(c!="object"||a===null)return c=="string"&&(a='"'+a+'"'),String(a);else{var d,b,f=[],e=a&&a.constructor==Array;for(d in a)b=a[d],c=typeof b,a.hasOwnProperty(d)&&(c=="string"?b='"'+b+'"':c=="object"&&b!==null&&(b=jQuery.stringify(b)),f.push((e?"":'"'+d+'":')+String(b)));return(e?"[":"{")+String(f)+(e?"]":"}")}}});

Так что просто включите это в начало вашего файла и измените свою проблемную строку на:

vString = jQuery.stringify(vehicleArray);
2 голосов
/ 06 октября 2011

IE в Windows Phone 7 основан на IE9 и поэтому должен поддерживать JSON.stringify. Однако, как ясно говорится в документации Microsoft , JSON.stringify недоступен, если вы находитесь в режиме причуд:

Не поддерживается в следующих режимах документа: Причуды, Интернет Стандарты Explorer 6, стандарты Internet Explorer 7.

Убедитесь, что ваш HTML-документ начинается с <!DOCTYPE html>. В качестве альтернативы вы можете использовать JSON-сериализатор с простым JavaScript, например json2.js .

0 голосов
/ 06 октября 2011

У меня нет опыта работы с телефонами под управлением Windows, но я подозреваю, что JSON.stringify не поддерживается браузером на устройстве. Это верно для старых браузеров, например ie6 - в этом случае одним из способов является использование JSON.js из Douglas Crockford ...

https://github.com/douglascrockford/JSON-js

json2.js: этот файл создает свойство JSON в глобальном объекте, если его еще нет, устанавливая его значение для объекта, содержащего метод stringify и метод parse. Метод parse использует метод eval для выполнения анализа, защищая его с помощью нескольких регулярных выражений для защиты от случайного выполнения кода. В текущих браузерах этот файл ничего не делает, предпочитая встроенный объект JSON.

...