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

Angular 6 - Ionic - 使用拦截器中断 http 请求并返回 json

(IONIC - Angular)我如何在 html 卡片中仅显示符合特定条件的 JSON 中的某些对象?