iPhone IOS 10 Safari JSON 解析:错误意外标识符“函数”
Posted
技术标签:
【中文标题】iPhone IOS 10 Safari JSON 解析:错误意外标识符“函数”【英文标题】:iPhone IOS 10 Safari JSON parse:error unexpected identifier "function" 【发布时间】:2016-10-19 16:32:09 【问题描述】:因此,我正在尝试在客户端站点上解决此错误,该错误仅在移动设备上的 ios 10 上发生。他们说它在将他们的设备升级到 IOS 10 之前工作。恢复到 IOS 9 实际上不会产生这个错误。它似乎是 JSON.parse 以及本地存储数据 (this.local[i]))。有关 js 错误、示例数据和 javascript sn-p,请参见下文。
Javascript 错误:
[Error] SyntaxError: JSON Parse error: Unexpected identifier "function"
parse (Locus.js:40)
数据样本:(this.local)
["ObservationID":"444","Username":"blah","Deleted":0,"Flagged":0,
"ObservationID":"555","Username":"blah","Deleted":0,"Flagged":0]
Javascript:
Locus.prototype.loadFromLocal = function ()
if (this.local)
for (var i in this.local)
var len = ('' + this.local[i]).split('').length;
if (len != 1)
this.data[i] = JSON.parse(this.local[i]);
else
if (parseFloat(this.local[i]) == this.local[i])
/* local storage is a number */
this.data[i] = parseFloat(this.local[i]);
else
/* already parsed */
this.data[i] = this.local[i];
【问题讨论】:
【参考方案1】:我想通了。 IOS 10 似乎会在出错时终止 javascript。我得到的错误是因为我的对象(this.local)中有其他不属于同一类型的项目。所以第一项是上面的json字符串,但第二项是一个数字。当它试图对第二个项目执行 split() 时,它被炸毁了。有趣的是,它不会在任何常见的桌面/mac 浏览器上出错,并且会做它应该做的事情。
解决方法是首先检查项目的类型,使用 typeof
和 try
catch
来区分字符串和 json 字符串。
类型: http://www.javascriptkit.com/javatutors/determinevar2.shtml
json vs 字符串: How to check if it's a string or json
if (typeof this.local[i] == 'number')
this.data[i] = parseFloat(this.local[i]);
else if (typeof this.local[i] == 'string')
try
this.data[i] = JSON.parse(this.local[i]);
catch(e)
this.data[i] = this.local[i];
【讨论】:
以上是关于iPhone IOS 10 Safari JSON 解析:错误意外标识符“函数”的主要内容,如果未能解决你的问题,请参考以下文章