Angular 的 $http.post 在 MS Edge 中不起作用

Posted

技术标签:

【中文标题】Angular 的 $http.post 在 MS Edge 中不起作用【英文标题】:Angular's $http.post not working in MS Edge 【发布时间】:2018-01-09 19:45:56 【问题描述】:

我正在尝试使用返回 JSON 的 $http.post 通过 AngularJS 进行 Web 2.0 API 调用,这听起来可能很奇怪,一个小时前它工作了,现在它没有,我没有改变事物。该应用程序继续在所有其他浏览器中工作,只是在 Edge 中失败。

var _login = function (loginData) 
        var data = "";
        var grant = [insert data to authorise user on server];
        var deferred = $q.defer();
        $http.post(serviceBase + 'token', data,  headers:  'Content-Type': 'application/x-www-form-urlencoded'  ).success(function (response) 
            _userlogin(response);
            deferred.resolve(response);
        ).error(function (err, status) 
            console.log(err + " " + status);
            _logOut();
            deferred.reject(err);
        );
        return deferred.promise;
    ;

我不得不取出一些信息,因为它是安全信息,但功能应该是相同的,所以,通过调试,我知道这是应用程序出错的地方。我也知道传入的登录数据是有效的,并且我已经在 REST 客户端上尝试了具有相同授权的相同调用,并且工作正常,就像我之前提到的相同调用没有更改在任何其他主要浏览器中运行(包括 IE奇怪)。

当该调用运行时,前端 Angular 执行以下操作:

$scope.authUser = function (username, password) 
            var loginData =  userName: username, password: password, useRefreshTokens: login.useRefreshTokens
            authService.login(loginData).then(function (response) 
                console.log(response);
                sessionStorage.setItem("status", "User Logged In As: ");
                sessionStorage.setItem("username", username);
                global.template = "templates/dashboard.html";
                login.password = "";
            ,
            function (err) 
                console.log(err);
                login.message = err.error_description;
                $("#passwordError").modal();
            );
        ;

应用程序在login.message = err.error_description; 处停止,因为它不是从 API 调用返回的。错误是:网络错误 0x2efd,由于错误 00002efd 无法完成操作。并且无法获取未定义或空引用的属性“error_description”。

编辑:忘了提 - 当 Fiddler 打开并捕获流量时,该应用程序可以工作。这是最奇怪的部分。

【问题讨论】:

从您的代码中删除所有console.log。有时,它可以解决 IE 问题。 没有仍然损坏 - 两个错误是:无法获取未定义或空引用的属性 'error_description' 和网络错误 0x2efd,由于错误 00002efd 无法完成操作。 我不确定,但可能与您的标题有关。只需将它们更改为 application/json 并检查(以确保问题仍然存在)在我的应用程序中,http 现在可以正常工作。 看看这个post,它使用了here提到的解决方案。他们说问题在于本地主机与本地主机之间的交互。希望对您有所帮助。 @Mickers - 谢谢!这就是问题所在 - 至少现在我知道我可以在应用程序发布时测试 Edge - 如果你把它作为答案输入,我会标记它以供将来参考 【参考方案1】:

查看使用here 提到的解决方案的this 帖子。他们说问题在于本地主机与本地主机之间的交互。

很高兴我能提供帮助。

【讨论】:

以上是关于Angular 的 $http.post 在 MS Edge 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

angular2 http.post 方法抛出 typeerror 异常

使用 Angular.js 的 HTTP POST

在 Angular 2 http.post 上添加任何选项或标题会发送 OPTIONS

如何在 Angular 4 Universal 中发出 http post 请求?

Angular2 http.post 和未定义的 req.body

Angular.js $http.post TypeError:无法读取未定义的属性“数据”