文字列をオブジェクトに変換しようとすると、エラーが発生します ``:
Unexpected token u in JSON at position 0
サービス
setUser : function(aUser){
//sauvegarder User
localStorage.setItem('User', JSON.stringify(aUser));
},
getUser : function(){
//récuperer User
return JSON.parse(localStorage.getItem('User'));
}
最初に行うことは、解析しようとしているものを調べることです。私の推測では、それは"undefined"
であり、これは無効なJSONです。ローカルストレージのキーに(まだ)何も保存していないため、undefined
を取得しています。 undefined
は、"undefined"
が解析できない文字列JSON.parse
に変換されます。
私は通常、次のようにローカルストレージに物を保存および取得します。
格納(ちょうどあなたのもの):
localStorage.setItem("key", JSON.stringify(thing));
(これは異なります)の取得:
thing = JSON.parse(localStorage.getItem("key") || "null");
if (!thing) {
// There wasn't one, do whatever is appropriate
}
そのようにして、私は常に有効なものを解析しています。
ブラウザがJSON文字列の解析を期待しているときに、JSON文字列として応答を返さないため、このエラーが発生します。したがって、応答文字列の最初の文字を取得してエラーをスローしています。
ブラウザの開発ツールの[ネットワーク]タブに移動し、応答を表示することで確認できます。
この問題を解決するには、httpリクエストで以下のコードを使用できます。
var promiz = $http.post(url, data, {
transformRequest: angular.identity,
transformResponse: angular.identity,
headers: {
'Content-Type': undefined
}
});
お役に立てれば!
私も同じエラーを受け取っていました。問題は、HTTP Get Requestから取得した応答がJSON形式ではなく、プレーンテキストであったことでした。
this.BASE_URL = "my URL";
public getDocument() {
return this.http.get(this.BASE_URL)
.map((res: Response) => res.json())
.catch((error: any) => Observable.throw(error.json().error || 'Server error'));
}
そのため、JSONパーサーはエラーをスローしていました。
これを次のようなプレーンテキストにマッピングすると、
.map((res: Response) => res.text());
できます。