javascript - iPhone IOS 10 Safari JSON 解析 :error unexpected identifier "function"

标签 javascript ios iphone json safari

因此,我正尝试在客户端站点上解决此错误,该错误仅发生在移动设备上的 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 浏览器上都不会出错,并且会执行它应该执行的操作。

修复是首先检查项目的类型,使用 typeoftry 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/

相关文章:

iphone - 进度条下载图片

javascript - 模板文字注入(inject)对象并传递给函数

javascript - jquery live search - 修改行为

javascript - Sorttable.js(Javascript 表排序)在 javascript 中创建表时不起作用

iphone - 使用mapkit计算半径(以米为单位)

iphone - 点击取消按钮时,移除 UISearchBar 右侧的清除按钮(灰色 x)

javascript - 未捕获的类型错误 : Immutable prototype object '#<Object>' cannot have their prototype set

ios - iOS 中的地理围栏限制

当视口(viewport)设置为 user-scalable=no 时,iOS/移动版 safari 仍会缩放?检查辅助功能设置!

ios - Swift-连接元组