如何在所有 ajax 请求中发送令牌

Posted

技术标签:

【中文标题】如何在所有 ajax 请求中发送令牌【英文标题】:How to send a token in all ajax requests 【发布时间】:2012-11-16 03:24:05 【问题描述】:

有没有一种方法可以在页面的所有 ajax 请求中发送令牌,而无需在每个 $.ajax() 调用中写入?

【问题讨论】:

【参考方案1】:

使用全局 beforeSend AJAX 事件修改任何 AJAX 请求:http://docs.jquery.com/Ajax_Events

更新:我刚刚检查过,似乎此事件将被弃用,因此请改用此事件:http://api.jquery.com/jQuery.ajaxPrefilter/

【讨论】:

【参考方案2】:

您可以全局设置此 var token = "某个值";

     $.ajaxSetup
        (
           
               cache:false,
               beforeSend: function (xhr)  xhr.setRequestHeader('Authorization', token); 
           
        );

或者您可以在 beforesend 选项中单独设置特定请求。

    beforeSend: function (xhr)  xhr.setRequestHeader('Authorization', token); 
           

【讨论】:

【参考方案3】:

首先,您必须在脚本行的开头进行设置:

    $(function () 
        var token = $('input[name="_csrf"]').val();
        $(document).ajaxSend(function(e, xhr, options) 
            console.log("ajax token!!!");
            xhr.setRequestHeader('X-CSRF-Token', token);
        );
    );

然后您通常可以进行所有 ajax 调用...

    $(function()
        $('#ddlGiro').change(function()
            var contentResult=document.getElementById('divComboComercio');
            var giro = $("#ddlGiro").val();
             $.ajax(
                 url: [[@'/comun/comercios/obtener/']] + giro,
                 data:  "origen" : 'AsignarLote',
                 dataType:'text',
                 cache:false,
                 type:'POST',
                 success:function(response)
                     contentResult.innerhtml=response;
                                            
             );
        );
    );

【讨论】:

以上是关于如何在所有 ajax 请求中发送令牌的主要内容,如果未能解决你的问题,请参考以下文章

使用 Laravel 发送 Ajax 请求

我的 jquery AJAX POST 请求无需发送真实性令牌(Rails)即可工作

如何在 ajax 标头中为每个用户发送 api 令牌?

如何在 Cakephp 3 的 ajax 调用中定义 CSRF 令牌。此外,对于某些 ajax 请求,如何关闭 CSRF

如何在表单的 AJAX 发布请求中传递 CSRF 令牌?

如何避免在 axios 中发送多个重复的 AJAX 请求