因此,我正尝试在客户端站点上解决此错误,该错误仅发生在移动设备上的 IOS 10 上。他们说在将他们的设备升级到 IOS 10 之前它可以正常工作。恢复到 IOS 9 实际上不会产生此错误。它似乎与 JSON.parse 以及本地存储数据 (this.local[i])) 有关。请参阅下面的 js 错误、示例数据和 javascript 代码段。
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];
}
}
}
}
最佳答案
我想通了。看来 IOS 10 将在出错时终止 javascript。我得到的错误是因为我的对象 (this.local) 中有其他不同类型的项目。所以第一项是上面的json字符串,但是第二项是一个数字。当它试图对第二项执行 split() 时,它失败了。有趣的是,它在任何常见的桌面/mac 浏览器上都不会出错,并且会执行它应该执行的操作。
修复是首先检查项目的类型,使用 typeof
和 try
catch
来区分字符串和 json字符串。
类型: http://www.javascriptkit.com/javatutors/determinevar2.shtml
json 与字符串: 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];
}
}
关于javascript - iPhone IOS 10 Safari JSON 解析 :error unexpected identifier "function",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40136984/