Angularjs JSON中位置0处的意外标记u
当我尝试将字符串转换为对象时,出现错误“`”:Angularjs JSON中位置0处的意外标记u,angularjs,json,local-storage,Angularjs,Json,Local Storage,当我尝试将字符串转换为对象时,出现错误“`”: 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 JS
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”
,该字符串JSON.parse
无法解析
我通常在本地存储中存储和检索内容,如下所示:
存储(与您的一样):
检索(这是不同的):
这样,我总是在解析有效的内容。您会遇到此错误,因为您没有以JSON字符串的形式返回响应,而您的浏览器希望解析JSON字符串。因此,它获取响应字符串的第一个字母并抛出一个错误 您可以通过转到浏览器开发工具的“网络”选项卡并查看响应来验证它 要解决此问题,可以在http请求中使用以下代码
var promiz = $http.post(url, data, {
transformRequest: angular.identity,
transformResponse: angular.identity,
headers: {
'Content-Type': undefined
}
});
希望这有帮助 我也犯了同样的错误。问题是我从HTTP Get请求得到的响应不是JSON格式,而是纯文本
this.BASE\u URL=“我的URL”;
公共文件(){
返回this.http.get(this.BASE\u URL)
.map((res:Response)=>res.json())
.catch((error:any)=>Observable.throw(error.json().error | |“服务器错误”);
}
因此,JSON解析器抛出了一个错误
当我将其映射为纯文本时,如下所示:
.map((res:Response)=>res.text());
它可以工作。请显示您试图解析的字符串。您的http调用中可能有数据类型:“json”或响应类型:“json”。而且似乎无法解析它(因为它不是有效的JSON格式)。尝试删除它们。最好的解决方案,在我从angularJS 1.2->1.3升级时效果很好。angularJS 6升级后,您无需再映射到JSON。“从HttpModule和Http服务切换到HttpClientModule和HttpClient服务。HttpClient简化了默认的人体工程学(不再需要映射到json),现在支持键入的返回值和拦截器。请阅读angular.io上的更多信息”
thing = JSON.parse(localStorage.getItem("key") || "null");
if (!thing) {
// There wasn't one, do whatever is appropriate
}
var promiz = $http.post(url, data, {
transformRequest: angular.identity,
transformResponse: angular.identity,
headers: {
'Content-Type': undefined
}
});