2016-10-19 16 views
1

モバイルデバイスのIOS 10でのみ発生するクライアントサイトでこのエラーのトラブルシューティングを試みています。彼らはIOS 10にデバイスをアップグレードする前にそれが働いていると言いました。IOS 9に戻すことは実際にこのエラーを生成しません。これはJSON.parseと一緒に、ローカルストレージデータ(this.local [i]))とともに何かのように見えます。 jsエラー、サンプルデータ、およびjavascriptスニペットについては、以下を参照してください。iPhone IOS 10 Safari JSON parse:予期しないエラーが発生しました "function"

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文字列でしたが、2番目の項目は数字でした。 2番目のアイテムでsplit()を実行しようとしたとき、それは爆発しました。面白いのは、一般的なデスクトップ/ Macブラウザのいずれにもエラーが出ず、それが何をすべきかを実行することです。

最初に、typeoftrycatchを使用して、文字列とjson文字列を区別する項目の種類を確認しました。

typeof演算:文字列対 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]; 
    } 
} 
関連する問題