正在读取angularjs中的HTTP服务器标头响应消息

Reading HTTP server header response messages in angularjs

本文关键字:响应 消息 服务器 HTTP 读取 angularjs 中的      更新时间:2024-02-15

我以以下方式向服务器发出Ajax请求:

应用程序设置:

var appRoot = angular.module('demoApp', ['ngRoute', 'ngResource']);
appRoot.config(['$routeProvider', function($routeProvider) {
         $routeProvider
         .when('/', { templateUrl: '/ngPartials/_Login.html', controller: 'LoginCtrl' })
         .otherwise({ redirectTo: '/ngPartials/_Login.html', controller: 'LoginCtrl' });
        }
]);

工厂:

appRoot.factory('LoginResource', function ($resource) {
    return $resource('/Login/Login');
});

控制器:

appRoot.controller('LoginCtrl', function ($scope, LoginResource) {
    //Make a get request on login resource
    $scope.User = LoginResource.get(
    {
       Role: val,
       Email_Id: $scope.Email,
       Pwd: $scope.Password
    }, function (response) { 
    //do someting in callback function
    });
});

现在,每当我从控制器发出Ajax请求时,我都希望读取从服务器返回的http头消息,并根据消息继续操作。

在本文中,它展示了如何读取从服务器返回的头消息。但在我的案例中,我对如何阅读标题感到困惑。

编辑:如果用$resource无法实现这一点,而只能用$http实现,那么需要在工厂中进行哪些更改,这样我就不需要更改来自控制器的调用了?更改控制器中的所有REST请求对我来说将是昂贵的,因为我需要在整个项目中实现更改。

我试着在我的工厂里做以下的改变,这样我就可以按照Michal的建议阅读标题了。ajax请求完成得很好,我的服务器登录方法也正确,但我通过angular$http请求发送的参数没有绑定到我的服务器登陆操作方法模型:

appRoot.factory('LoginResource', function ($resource, $http) {
    var loginResource = {
        response:{},
        get: function (param) {
            $http.get('/Login/Login', param).
             success(function (data, status, headers, config) {
                 this.response = data;
             }).
             error(function (data, status, headers, config) {
                 alert('error');
            });
        }
    }
    return loginResource;
});

服务器端型号:

public class LoginModel
{
    public string Role { get; set; }
    public string Email_Id { get; set; }
    public string Pwd { get; set; }
    public bool IsEmailValidation { get; set; }
}

动作方式:

public JsonResult Login(LoginModel oLogin)
{
   ...
}

我做错了什么?

您不能用$resource来实现这一点,它只提供高级API,读取http请求需要$http。

成功回调函数在返回中有第二个参数

以下是角度文档的摘录:

使用(value,responseHeaders)参数调用成功回调。使用(httpResponse)参数调用错误回调。

链接:Angular$Resource

因此,在回调中,您可以获得这样的响应标头:

appRoot.controller('LoginCtrl', function ($scope, LoginResource) {
    //Make a get request on login resource
    $scope.User = LoginResource.get(
    {
       Role: val,
       Email_Id: $scope.Email,
       Pwd: $scope.Password
    }, function (response,responseHeader) {
      var headers = responseHeader();
    //do someting in callback function
    });
});

headers对象包含从服务器端返回的headers