nev*_*eup 14 json local-storage angularjs
当我尝试将字符串转换为对象时,我得到错误``:
Unexpected token u in JSON at position 0
Run Code Online (Sandbox Code Playgroud)
服务
setUser : function(aUser){
//sauvegarder User
localStorage.setItem('User', JSON.stringify(aUser));
},
getUser : function(){
//récuperer User
return JSON.parse(localStorage.getItem('User'));
}
Run Code Online (Sandbox Code Playgroud)
T.J*_*der 13
首先要做的是查看您要解析的内容.我的猜测是你会找到它"undefined"
,这是无效的JSON.你得到的undefined
是因为你还没有在本地存储中保存任何东西.undefined
然后转换成字符串"undefined"
,其JSON.parse
无法解析.
我通常在本地存储中存储和检索东西,如下所示:
存储(就像你的一样):
localStorage.setItem("key", JSON.stringify(thing));
Run Code Online (Sandbox Code Playgroud)
检索(这是不同的):
thing = JSON.parse(localStorage.getItem("key") || "null");
if (!thing) {
// There wasn't one, do whatever is appropriate
}
Run Code Online (Sandbox Code Playgroud)
这样,我总是在解析有效的东西.
您收到此错误是因为在浏览器期望要解析JSON字符串时,您没有将响应作为JSON字符串返回.因此,它会获取响应字符串的第一个字母并抛出错误.
您可以通过浏览器的Dev工具的网络选项卡并查看响应来验证它.
要解决此问题,您可以在http请求中使用以下代码.
var promiz = $http.post(url, data, {
transformRequest: angular.identity,
transformResponse: angular.identity,
headers: {
'Content-Type': undefined
}
});
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
小智 5
我也遇到了同样的错误。问题是我从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'));
}
Run Code Online (Sandbox Code Playgroud)
因此,JSON分析器抛出错误。
当我将其映射为纯文本时,如下所示:
.map((res: Response) => res.text());
Run Code Online (Sandbox Code Playgroud)
有用。