【发布时间】:2013-10-14 11:36:26
【问题描述】:
我正在构建一个购物车,当按下“购买”按钮时,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/ 这个 Fiddle 将复制这个问题,它涉及将数据作为字符串存储在 Cookie 中并将其重新解析为 JSON
但是,由于我已将我的 Cookie 函数作为外部资源 (http://www.sam.thinkka.com/clientscripts/cookie_test.js) 包含在内,因此您需要确保 Safari 不会阻止第三方 Cookie。
【问题讨论】:
-
不,逗号不是问题
-
你能提供一个 jsFiddle 例子来演示这个问题吗?
-
作为记录,我让你的 JSON 字符串在 Safari 中使用 jsFiddle 工作得很好......见jsfiddle.net/KRR2N 我唯一改变的是删除
// << HERE IS THE ISSUE评论,因为那是无效的 JSON,但我猜这不在你的原始代码中。 -
@Spudley,谢谢。我也能够让它与那个 Fiddle 一起工作,但是,我已经扩展了 Fiddle 以使用我的
cookies函数,现在实际上得到了一个不同的错误!建议 Cookie 不起作用,但它们适用于其他所有内容! jsfiddle.net/jhartnoll/2GLEz -
好的,我想现在我们有了你的小提琴代码,我们正在解决问题的关键。基本上,它归结为逃避。但请参阅我的答案了解更多信息。
标签: javascript jquery json safari