【问题标题】:angularjs how to do setup ajax like jQueryangularjs如何像jQuery一样设置ajax
【发布时间】:2018-08-01 09:34:52
【问题描述】:

我如何在 Angular JS 中执行此代码

$.ajaxSetup({
   complete: function (jqXHR) {
      var new_token = jqXHR.getResponseHeader('X-CSRF-Token');
      $('meta[name="_token"]').attr('content', new_token);
   }
});

我想在使用 angular $http 发布时设置新令牌

【问题讨论】:

  • 在你的模块配置中试试这个:$httpProvider.defaults.headers.common["X-CSRF-TOKEN"] = "YOUR_TOKEN;
  • 我做到了,没用
  • 我的代码var AH_App = angular.module('AH_App', [ 'AH_App.services', 'AH_App.controller', ]).config(function ($httpProvider) { $httpProvider.interceptors.push('interceptors'); $httpProvider.defaults.headers.common['Accept'] = 'application/json, text/javascript'; $httpProvider.defaults.headers.common['Content-Type'] = 'application/json; charset=utf-8'; $httpProvider.defaults.headers.common['X-CSRF-TOKEN'] = $('meta[name="csrf-token"]').attr('content'); });
  • 我需要这样做$.ajaxSetup({ complete: function (jqXHR) { var new_token = jqXHR.getResponseHeader('X-CSRF-Token'); $('meta[name="csrf-token"]').attr('content', new_token); } });
  • 我认为@Madhan Varadhodiyil 解决方案适合您。

标签: jquery angularjs ajax


【解决方案1】:

好的,这应该可以工作:

工厂定义:

myApp.factory('tokenInterceptorService', ['$q',
    function CsrfTokenInterceptorService($q) {

        var CSRF_TOKEN_HEADER = 'X-CSRF-TOKEN';

        var token;


        var service = {
            response: onSuccess,
            responseError: onFailure,
            request: onRequest,
        };

        return service;

        // Private functions.
        function onFailure(response) {
            if (response.status === 403) {
                //DO SOMETHING
            }

            return $q.reject(response);
        }

        function onRequest(config) {
            //SET TOKEN TO SEND
            config.headers[CSRF_TOKEN_HEADER] = token;


            return config;
        }

        function onSuccess(response) {
            //SET HERE NEW TOKEN FROM REQUEST RESPONSE
            var newToken = response.headers(CSRF_TOKEN_HEADER);


            if (newToken) {
                token = newToken;
            }

            return response;
        }
    }
]);

配置定义:

.config(function($httpProvider) {
    $httpProvider.interceptors.push('tokenInterceptorService');
});

【讨论】:

  • 你能不能给 $http 写一个 do 方法 POST 的示例代码
  • $http.post('/someUrl', {key: value}).then(function(data){//handle here data});因此,当您调用:在 onRequest 方法中,您将在每次调用时在 onSuccess 方法中设置您的标头令牌,您将读取响应标头(CSRF_TOKEN_HEADER)并更新您的令牌
  • 你能用我的代码编辑你的解决方案吗factory("interceptors", [function () { return { 'request': function (request) { if (request.beforeSend) request.beforeSend(request); return request; }, 'response': function (response) { if (response.config.success) response.config.success(response); return response; } }; }]);
  • 我不确定你想要什么,你能详细解释一下吗?
【解决方案2】:

您可以使用interceptorshttp 请求推送令牌

//Assuming you've created an module,

app.config([ '$httpProvider',   function($httpProvider) {
 $httpProvider.interceptors.push('CSRFInterceptor');
}]);
app.service('CSRFInterceptor', [function() {
this.request = function(config) {
    config.headers['X-CSRF-Token']= getCSRFToken();
    return config;
};
}]);

【讨论】:

  • 函数getCSRFToken()怎么样
  • 如果您使用基于 cookie 的 CSRF 令牌机制,您可以从 cookie 获取它
猜你喜欢
  • 1970-01-01
  • 2015-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-26
  • 1970-01-01
  • 1970-01-01
  • 2011-06-27
相关资源
最近更新 更多