我正在构建一个购物车,当按下“购买”按钮时,一个web服务返回一个JSON输出,我将其保存为一个Javascript cookie字符串。
Web服务的典型返回值可能是:
{
"d":{
"58658":{
"id":"58658",
"qty":"1",
"singlePrice":"754",
"salePrice":"754",
"isBulk":"0",
"isSor":"0",
"vatRate":"20.00",
"masterCat":"6",
"imgUrl":"http://...img url",
"singleWeight":"18000",
"totalAvailableStock":"2",
"thirdPartyStock":"",
"item":"Electrovoice Live X Elx115p, Each " // << HERE IS THE ISSUE
}
}
}
当返回值如上所示时,仅在Safari中会失败。
花费了很多时间寻找一些不用购买Mac就能调试的有用机制,最终我找到了解决方法:
"item":"Electrovoice Live X Elx115p, Each " // << HERE IS THE ISSUE - The comma
item
的值在字符串中有逗号,我会使用类似以下方式将返回值保存到cookie中:
cookies.set('shopping_cart', JSON.stringify(result)); // (where result is the JSON above)
当我稍后尝试回忆它时:
var shopping_cart = cookies.get('shopping_cart');
shopping_cart = JSON.parse(shopping_cart);
它在所有浏览器中都能正常工作,甚至包括Internet Explorer...但Safari除外。
我没有Mac电脑,所以不确定Mac上的Safari是否有所不同,但Windows版本肯定存在此错误,并且我的iPhone和iPad上也是如此。
这个错误是:
JSON parse error, unterminated string.
正如我所说,这似乎只是在Safari中存在的问题,但我很难找到解决方案。
非常感谢您的帮助!
编辑:
我创建了一个Fiddle:http://jsfiddle.net/jhartnoll/2GLEz/ 这个Fiddle将复制此问题,它涉及将数据存储为Cookie中的字符串并将其重新解析为JSON.
但是,因为我将我的Cookie函数作为外部资源(http://www.sam.thinkka.com/clientscripts/cookie_test.js)包含在内,您需要确保Safari未阻止第三方Cookie。