Laravel中的令牌不匹配ajax
Posted
技术标签:
【中文标题】Laravel中的令牌不匹配ajax【英文标题】:token mismatching ajax in Laravel 【发布时间】:2016-11-15 22:51:56 【问题描述】: $('#id').change(function()
var a = $('#id_one').val();
var token = '<?php echo csrf_token(); ?>';
$.ajax(
url: "url",
type: 'POST',
data: 'id':a,'_token':token,
success: function(data)
// some code
);
)
这是我的代码。 获取令牌不匹配错误..!! 我已经尝试了以下两个..
<input type="hidden" name="_token" value=" csrf_token() " />
<script type="text/javascript">
var _globalObj = json_encode(array('_token'=> csrf_token()))
谁能帮忙??
【问题讨论】:
laravel TokenMismatchException in ajax request的可能重复 【参考方案1】:您可以使用刀片模板中的令牌,只需在您视图的刀片文件中的脚本标签下声明您的会话令牌,如下所示:
<script> var token = ' Session::token() '; </script>
并在 ajax 中调用令牌,在您的代码中它将是这样的:
$('#id').change(function()
var a = $('#id_one').val();
$.ajax(
url: "url",
type: 'POST',
data: 'id':a,'_token':token,
success: function(data)
// some code
);
)
【讨论】:
【参考方案2】:可能是因为令牌字段名称应该是_token
而不是token
此外,如果此 javascript 代码位于单独的 javascript 文件中,则 php 函数将不起作用。
此外,如果您尝试发送的数据是一种形式,那么您可以这样做
$('#id').change(function()
var data = $("#form").serialize() ;
$.ajax(
url: "url",
type: 'POST',
data: data,
success: function(data)
// some code
);
)
表单的样子
<form id="form">
<input type='hidden' value=' csrf_token() ' name='_token'>
<input type="text" name='id'>
</form>
【讨论】:
这只是我刚刚存储的变量。这有什么意义吗?我也尝试通过在隐藏字段中传递它,仍然无法正常工作...... 将您的token
变量更改为 _token
并告诉我它是否有效。还要确保 laravel 中间件未受影响。【参考方案3】:
$.ajax(
url: someurl,
type: 'POST',
data : formData,
headers:
"x-csrf-token": $("#token").data('id')
);
在你的 html 中
<div id="token" data-id="!! csrf_token() !!"></div>
【讨论】:
以上是关于Laravel中的令牌不匹配ajax的主要内容,如果未能解决你的问题,请参考以下文章
csrf 令牌会在 laravel 中的每个请求上自动重新生成,这会导致生产服务器上的 csrf 令牌不匹配
laravel 5中多个异步ajax请求中的CSRF令牌不匹配错误?
本地主机上 laravel 5.3 中 ajax 发布请求中的 CSRF 令牌不匹配异常