0

我無法讓我的角度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 //字符串數組
};

回答

0

不是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; 
     }); 
} 

}