AngularJs服务中的自定义AJAX属性

Custom AJAX property within AngularJs Service

本文关键字:AJAX 属性 自定义 服务 AngularJs      更新时间:2023-09-26

非常简单的场景:

代码:

$.ajax({
    type: "GET/POST",
    url: 'http://somewhere.net/',
    data: data,
    beforeSend: '', // custom property
}).done().fail();

基本上,我正在寻找一种合法的方式来修改Angular工厂服务中的beforeSend。请参阅我所拥有的:

myApp.factory('GetBalance', ['$resource', function ($resource) {
    return $resource('/Service/GetBalance', {}, {
        query: { method: 'GET', params: {}, }, isArray: true,
    });
}]);

这里我使用的是AngularJs服务api问题是文档对我试图实现的目标没有太大帮助。

如果您想附加自定义headers,可以这样做。

myApp.factory('GetBalance', ['$resource', function ($resource) {
    return $resource('/Service/GetBalance', {}, {
        query: { method: 'GET', params: {}, headers: { 'beforeSend': '' } }, isArray: true,
    });
}]);

您可能对requestInterceptor感兴趣,尤其是对具有以下参数的addFullRequestInterceptor方法感兴趣:

它可以返回具有以下任何(或全部(属性的对象:

  • headers:要发送的标头
  • params:要发送的请求参数
  • element:要发送的元素
  • httpConfig:要调用的httpConfig

@Thalaivar建议的解决方案本应根据Angular文档工作,但无论出于何种原因,它在我的特定用例中都不起作用。

在这里,我提供了一个替代解决方案,为我制定如下:

myApp.config(['$provide', '$httpProvider', function ($provide, $httpProvider) {
    // Setup request headers
    $httpProvider.defaults.headers.common['modId'] = 1;     // dynamic var
    $httpProvider.defaults.headers.common['pageId'] = 2;    // dynamic var
    $httpProvider.defaults.headers.common['token'] = 'xyz'; // dynamic var
    $httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
});

我知道在我的例子中,头值是硬编码的,但实际上情况会随着页面的变化而变化,所以这些值实际上是动态检索的。

同样,如果您使用的是基于$http的服务,则不需要这样做。