【问题标题】:Is there a global way to add headers to $.ajax post calls?是否有一种将标头添加到 $.ajax 帖子调用的全局方法?
【发布时间】:2021-01-03 13:01:18
【问题描述】:

$.ajax({
  url: "RestEndPoint",
  headers: {
    'X-CSRF-TOKEN' : $('meta[name="csrf-token"]').attr('content')
  }
  method: 'POST',
  dataType: 'JSON',
  data: dataObj,
  success: function(data) {
    console.log('Success')
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>

有数百个 ajax post 调用。有没有办法在一个地方拦截所有调用并在那里添加标题?无法使用 ajaxPrefilter,因为 jquery 1.11.3 不支持。

【问题讨论】:

  • “不能使用 ajaxPrefilter,因为 jquery 1.11.3 不支持它” - 你为什么这么认为? .ajaxPrefilter() 从 1.5 版开始成为 jQuery 的一部分。在浏览器中打开 <script> 元素的 URI 并搜索它,您会找到它。
  • @Andreas 你是对的。我将尝试使用 ajaxPrefilter 全局添加标题。

标签: javascript jquery csrf csrf-token


【解决方案1】:

var csrf_token = $('meta[name="csrf-token"]').attr('content');
$.ajaxPrefilter(function(options, originalOptions, jqXHR){
    if (options['type'].toLowerCase() === "post") {
        jqXHR.setRequestHeader('X-CSRFToken', csrf_token);
    }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>

使用 ajaxPrefilter 解决

【讨论】:

    【解决方案2】:

    您可以通过在 $.ajaxsetup 函数上设置它来实现全局

    $.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
             }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-25
      • 1970-01-01
      • 2010-12-19
      • 2014-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多