我正在构建一个购物车,当按下“购买”按钮时,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 中的一个问题,但很难找到解决方案。
非常感谢帮助!
编辑:
我创建了一个小提琴:http: //jsfiddle.net/jhartnoll/2GLEz/ 这个小提琴将复制问题,它与将数据作为字符串存储在 Cookie 中并将其重新解析为 JSON 有关
但是,由于我已将我的 Cookie 函数作为外部资源 ( http://www.sam.thinkka.com/clientscripts/cookie_test.js ) 包含在内,因此您需要确保 Safari 不会阻止第三方 cookie。