【问题标题】:polyfills issues with Internet explorer 11 and angular HttpClient postInternet Explorer 11 和 Angular HttpClient 帖子的 polyfills 问题
【发布时间】:2017-10-11 13:14:58
【问题描述】:

我无法通过新的 httpclient 帖子让我的 angular 4 应用程序在 IE 11 中工作。此问题仅与 IE11 有关,并且在 chrome 中运行良好。

我不断收到错误无效字符。

据我所知,不同的是我发送到服务器的帖子正文。在 chrome 浏览器中,它的格式如下:

在 IE11 中,相同的对象看起来像这样:

这些 Symbol 属性是否会弄乱对象以使其无法在服务器上被接受?如果我不使用拦截器解析错误消息,我只会得到内部服务器错误(500)。

这是我指定在正文中发送的对象:

让身体 =
{
FromDate: form.fromDepDate,//日期
ToDate: form.toDepDate, //日期
UserIds: userIds //字符串数组
};

【问题讨论】:

  • 你修好了吗?我有同样的问题

标签: angular typescript httpclient internet-explorer-11 polyfills


【解决方案1】:

不是 100% 确定我理解您的要求。看起来许多角度用户在使用 IE 时遇到的问题。这个问题是http请求实际上通过了,但被角度视为错误,因为它无法解析服务器响应(但你说的是500s?如果你真的得到500个内部服务器错误,那么很可能是你的后端有问题)

如果您没有得到 500 秒,但上述行为很糟糕,这似乎是 IE11(可能还有其他)上的一个错误,角度为 4+。看起来 HttpClient 无法解析空的 200 响应。

angular repo 上跟踪错误。

虽然它已在 angular 5.2.4 中得到修复,但如果您不能或不会更新,似乎可以使用多种解决方法:

  • 一种可能性是在响应正文为空时将服务器更改为返回 204 No Content 而不是 200
  • 另一个可能的解决方法是使用 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;
        });
}

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    • 2014-02-01
    • 2014-09-10
    相关资源
    最近更新 更多