Json 输入 Ionic 3 和 Angular 6 意外结束
Posted
技术标签:
【中文标题】Json 输入 Ionic 3 和 Angular 6 意外结束【英文标题】:Unexpected end of Json Input Ionic 3 & Angular 6 【发布时间】:2019-07-19 16:42:40 【问题描述】:我看到了很多关于这个错误的主题,但我找不到任何解决方案。我今天早上醒来并提供了我的代码,我看到错误“Json 输入意外结束”我没有改变我的代码或包的版本。我和我的同事正在做这个项目,虽然我们有相同的包和版本,但相同的代码在他的计算机上运行良好。
问题是当我请求服务器时,它响应“status 200 ok”但它返回空的“_body”,如下图所示。
这里是错误的详细信息:
示例代码是;
console.log(localStorage.getItem("usedURL"));
return new Promise((resolve, reject) =>
let headers = new Headers();
headers.append('Accept', 'application/json');
headers.append('Content-Type', 'application/x-www-form-urlencoded');
this.http.post(localStorage.getItem("usedURL")+"/login", JSON.stringify( "UserName": credentials.email, "Password": credentials.password ), headers: headers)
.subscribe(res =>
console.log(res);
resolve(res.json());
, (err) =>
reject(err);
);
);
但是我相信它与代码无关。所以我尝试清理缓存,删除节点模块并重新安装它。将我同事的所有代码复制到我的计算机,但问题从未消失。所以有人知道我该如何解决这个问题吗?
谢谢。
【问题讨论】:
首先,你是http
还是httpclient
?其次,你为什么要在 http 请求上封装一个承诺?第三,如果你想返回promise,你可以简单地使用.toPromise()
learnrxjs.io/operators/utility/topromise.html将你的http请求转换为promise。
我正在使用 http。我在每个提供程序中都收到此错误,因此当我转换此可观察对象或编写为 .toPromise() 版本时没有任何变化。
您应该使用 HttpClientModule
而不是 HttpModule
,因为您使用的是 angular6 angular.io/api/common/http/HttpClientModule。
【参考方案1】:
如果看不到图片,
响应;
Response _body: "", status: 200, ok: true, statusText: "OK", headers: Headers, …
headers: Headers _headers: Map(0), _normalizedNames: Map(0)
ok: true
status: 200
statusText: "OK"
type: 2
url: "http://myapiurl//login"
_body:""
__proto__: Body
错误详情;
ERROR SyntaxError: Unexpected end of JSON input
at JSON.parse (<anonymous>)
at Response.Body.json (http.js:1091)
at SafeSubscriber._next (account-auth-service.ts:109)
at SafeSubscriber.__tryOrUnsub (Subscriber.js:242)
at SafeSubscriber.next (Subscriber.js:189)
at Subscriber._next (Subscriber.js:129)
at Subscriber.next (Subscriber.js:93)
at XMLHttpRequest.onLoad (http.js:1591)
at t.invokeTask (polyfills.js:3)
at Object.onInvokeTask (core.js:4751)
【讨论】:
你不必在这里写你的问题作为答案.. :) 你可以编辑问题 感谢您的建议 :)。我希望你也对这个问题有所了解:)【参考方案2】:你得到的错误与你得到的响应是正确的。
我的意思是您的响应正文是“”,如果您尝试JSON.parse("")
,您将收到错误消息。即,
ERROR SyntaxError: Unexpected end of JSON input
at JSON.parse (<anonymous>)
所以现在我们发现你得到的错误是因为你得到的响应。现在我们需要知道为什么您的 API 返回空白字符串?我们不知道,因为您还没有粘贴您的 API 登录代码。无论哪种方式,您都需要编辑您的问题并添加您的 API 登录代码或创建一个新问题。
【讨论】:
【参考方案3】:您现在使用的是哪个版本的 Chrome?如果您使用最新版本,请尝试降级您的版本:)。不客气。
【讨论】:
谢谢老兄!!这解决了我的问题。你是最棒的!以上是关于Json 输入 Ionic 3 和 Angular 6 意外结束的主要内容,如果未能解决你的问题,请参考以下文章
Ionic 3 在 android 上加载本地 json 文件失败
Ionic 3 和 Angular 2 中的多个 @Input
Angular / Ionic - 处理 JSON“错误”属性
如何创建对象数组或使用模型,就像我们在 JSON 中一样 - Angular/Ionic