如何在所有 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 请求中发送令牌的主要内容,如果未能解决你的问题,请参考以下文章
我的 jquery AJAX POST 请求无需发送真实性令牌(Rails)即可工作
如何在 Cakephp 3 的 ajax 调用中定义 CSRF 令牌。此外,对于某些 ajax 请求,如何关闭 CSRF