javascript – 如果出现404错误,如何获取帖子json?

我有一个服务调用,当它返回404错误时,我想显示当状态为404时来自服务器的消息.所以,如果出现错误或成功,我会得到一个json的帖子给我一个状态代码和消息,指示它是否成功.

好吧,我有这个服务电话:

this._transactionService.findExistingTransaction(user,searchNumber)
       .subscribe(data => {

       this.transactionResponse = data;
       console.log(JSON.stringify(this.transactionResponse));

       this.router.navigate(['/edit-transaction-portal'],{queryParams: {bill: searchNumber}});

       this.onDismiss();
      },(err) => { this.displayErrors = true;});

出错时,它会设置bool displayErrors = true然后我可以在我的UI中显示错误消息.

在HTML代码中:

<input #inputtedNumber class="transactionInput" placeholder="{{numberPlaceholder | translate }}"/>
        <div class="error-msg1" *ngIf="displayErrors" style="margin-left:90px;" name="errorMsg">
           {{transactionResponse._errorDetails._message}} </div>

这是我直接尝试访问api端点时回发的json:

{  
   "_transactionNumber":null,"_order":null,"_errorDetails":{  
      "_status":"404","_message":"Number is not available"
   }
}

我绑定到从服务调用中返回的transactionResponse对象.不幸的是,尽管我认为这应该有效,但我得到的问题是_errorDetails是未定义的,因此没有任何显示.

我想知道这是否适合这样的设置?如果现在,我该如何解决?

谢谢!

编辑:没有答案的重复SO帖子:How to read Custom error message from backend in Angular 4/2

解决方法

来自服务器的响应主体应该在错误回调中返回的错误响应的error属性中.

关于HttpErrorResponse,文件说明:

>表示错误或失败的响应,可能来自非成功的HTTP状态,执行请求时的错误,或者在解析响应期间发生的其他故障.
> Observable响应流上返回的任何错误都将包含在HttpErrorResponse中,以便在发生错误时提供有关HTTP层状态的其他上下文. error属性将包含一个包装的Error对象或从服务器返回的错误响应.

如果要使用相同的transactionResponse来显示错误,请分配返回this.transactionResponse的错误的错误属性.

服务电话

this._transactionService.findExistingTransaction(user,searchNumber).subscribe(
   (data) => {

     this.transactionResponse = data;
     console.log(JSON.stringify(this.transactionResponse));

     this.router.navigate(['/edit-transaction-portal'],{queryParams: {bill: searchNumber}});

     this.onDismiss();
  },(err: HttpErrorResponse) => {
    this.displayErrors = true;

    // assign the error property of the err that comes back to the transactionResponse
    this.transactionResponse = err.error;
  });

HTML
然后这将工作.

<input #inputtedNumber class="transactionInput" placeholder="{{ numberPlaceholder | translate }}"/>
<div class="error-msg1" *ngIf="displayErrors" style="margin-left:90px;" name="errorMsg">
    {{transactionResponse._errorDetails._message}}
</div>

2017年9月,Angular的这一部分已经完成了一些工作.parse error response body for responseType “json”因此您可能需要根据您的版本更新Angular.

该解决方案在以下方面进行了测试:

>节点v8.2.1
> NPM v5.3.0
> Angular CLI:1.7.2
> Angular:5.0.0

编辑:StackBlitz示例

HttpErrorResponse StackBlitz example

此示例对服务的外观以及调用的端点进行了一些假设.该服务向www.google.com发出POST呼叫.这会失败并返回HttpErrorResponse.

{
  "isTrusted": true
}

HttpErrorResponse的error属性分配给this._transactionResponse.然后可以在模板中访问它并在浏览器中显示.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


kindeditor4.x代码高亮功能默认使用的是prettify插件,prettify是Google提供的一款源代码语法高亮着色器,它提供一种简单的形式来着色HTML页面上的程序代码,实现方式如下: 首先在编辑器里面插入javascript代码: 确定后会在编辑器插入这样的代码: <pre
这一篇我将介绍如何让kindeditor4.x整合SyntaxHighlighter代码高亮,因为SyntaxHighlighter的应用非常广泛,所以将kindeditor默认的prettify替换为SyntaxHighlighter代码高亮插件 上一篇“让kindeditor显示高亮代码”中已经
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面
如何用js控制图片放大缩小
JS怎么获取当前时间戳
JS如何判断对象是否为数组
JS怎么获取图片当前宽高
JS对象如何转为json格式字符串
JS怎么获取图片原始宽高
怎么在click事件中调用多个js函数
js如何往数组中添加新元素
js如何拆分字符串
JS怎么对数组内元素进行求和
JS如何判断屏幕大小
js怎么解析json数据
js如何实时获取浏览器窗口大小
原生JS实现别踩白块小游戏(五)
原生JS实现别踩白块小游戏(一)