Internet Explorer 11和角度HttpClient post的填充问题

Internet Explorer 11和角度HttpClient post的填充问题

问题描述:

我无法让我的角度4应用程序在IE 11中使用新的httpclient文章工作。此问题只与IE11有关,并且在Chrome中运行正常。Internet Explorer 11和角度HttpClient post的填充问题

我不断收到错误无效的字符。 enter image description here

从我可以看到,不同的是我发送到服务器的后身。在Chrome浏览器,它的格式是这样的:

enter image description here

而且在IE11同一物体看起来像这样:

enter image description here

可以将这些符号性乱了对象,以便它不会被接受在服务器上?如果我不使用拦截器解析错误消息,我只是得到内部服务器错误(500)。

这是我指定给全身对象:

让身体= {

FROM日期:form.fromDepDate,//日期
TODATE:form.toDepDate,//日期
UserIds:userIds //字符串数组
};

不是100%确定我明白你的问题。它看起来像许多角度用户在IE中遇到的问题。这个问题是http请求实际上通过了,但是由于它不能解析服务器响应而被视为错误(但是你谈论500s?如果实际上得到500个内部服务器错误,那么它很可能是后端的一个问题)

如果你没有得到500s,但如上所述的行为吸引,这似乎是一个错误IE11(和其他人)与角度4+。它看起来像HttpClient不能分析空的200响应。

angular repo上跟踪错误。

虽然被定格在角5.2.4,如果你不能或不会更新,多种解决方法似乎工作:

  • 一种可能性是改变你的服务器返回204 No Content代替响应正文为空时
  • 另一种可能的解决方法是使用HTTP拦截器来执行工作as compeek suggested

这是我的解决方案:

@Injectable() 
export class EmptyResponseBodyInterceptor implements HttpInterceptor { 
intercept(req: HttpRequest <any> , next: HttpHandler): Observable < HttpEvent <any>> { 
    req = req.clone({ 
     responseType: 'text' 
    }); 

    return next.handle(req) 
     .map((res) => { 
      if (res instanceof HttpResponse) { 
       if (res.body === 'OK') { 
        res.clone({ 
         body: null 
        }); 
       } else { 
        res = res.clone <any> ({ 
         body: res.body !== '' ? JSON.parse(res.body) : null 
        }); 
       } 
      } 

      return res; 
     }); 
} 

}