【问题标题】:Phonegap angularjs $http.post() always returns http code 200Phonegap angularjs $http.post() 总是返回 http 代码 200
【发布时间】:2013-10-30 18:49:27
【问题描述】:

Angularjs v. 1.2.0rc3 与 phonegap 3.1 和 django-rest-framework

当将数据发布到我的 API(登录表单)时,无论我是否使用正确的凭据等进行身份验证,我都会在 angularjs 中获得状态 200。即使我只是在 API 视图中返回 HTTP_400,如下例所示,angularjs 认为这是HTTP_200 状态码。 我确信后端 API 返回 HTTP_400,它在使用本地 http 服务器时可以正常工作。 我也可以通过调试 api 视图来确认这一点。

这是示例代码。 Django Rest 框架代码:

class LoginView(APIView):
    def post(self, request):
        return Response({}, status=status.HTTP_400_BAD_REQUEST)

还有我的 angularjs 控制器:

$scope.login = function () {
    $http.post(API_URL, $scope.loginUser).then(
        function(response) {
            console.log('STATUS : ' + response.status);
            console.log('request OK');
        },
        function() {
            console.log('request is NOT OK');
        )};

据我所知,phonegap 使用本地 file:// 协议,所以应该没有 CORS 相关问题?

当在 chrome 浏览器上相同时,我得到 Origin file:// is not allowed by Access-Control-Allow-Origin。在 chrome 启动脚本中添加 --disable-web-security 标志可以消除这个问题,但它并不能解决 phonegap 的“总是 200 状态码”。

在 android 2.3 & phonegap 3.1 & angularjs 1.2.0rc3 上测试

【问题讨论】:

  • 似乎这是一个 angularjs 问题:github.com/angular/angular.js/issues/4436
  • 我在使用 angular 1.2.0rc3 和 phonegap 3.1 时遇到了同样的问题。即使服务器在我的拦截器中返回状态代码 401,它仍然显示为状态 200。同样的问题在 1.2 stable 中也存在。
  • 顺便说一下,我在使用 angular 1.2.0rc2 时没有遇到这个问题,所以请您尝试一下并报告。
  • 太糟糕了this 可能修复问题的补丁在稳定发布之前没有合并。
  • 对我来说同样的问题。它不会捕获错误回调的 401、404 状态码,但它适用于向浏览器提供文件的 webserver

标签: angularjs cordova django-rest-framework


【解决方案1】:

确认已在 AngularJS 1.2.3 中修复

请参阅此处的行: https://github.com/angular/angular.js/blob/v1.2.3/src/ng/httpBackend.js#L122

【讨论】:

  • 考虑投票赞成分享实际的代码行:D
  • 已确认。从1.2.1升级到1.2.3,问题确实解决了。
【解决方案2】:

升级到最新(1.2.9 版)AngularJS 版本,现已解决。

【讨论】:

    猜你喜欢
    • 2017-01-18
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    相关资源
    最近更新 更多