【发布时间】:2020-10-21 17:29:50
【问题描述】:
我是一名 PHP 开发人员,目前根据我的任务正在转向 Laravel 框架,我必须使用 ajax 完成实时表,但我遇到了一个错误,即 CSRF 令牌不匹配错误,请帮助我解决我发布的错误仅短代码
JAVA 脚本
<script>
function getMessage() {
$.ajax({
//var data = {"_token": $('#token').val()},
type:'POST',
url:'/getMsg',
headers: {'XSRF-TOKEN': $('meta[name="_token"]').attr('content')},
success:function(data) {
$("#msg").html(data.msg);
}
});
}
</script>
路线路径
Route::post('/getMsg','CustomerSearchController@doAjaxTest');
控制器代码
public function doAjaxTest(){
$msg = "<b>Message over ajax This test is Successful</b>.";
return response()->json(array('msg'=> $msg), 200);
}
HTML 代码
<center>
<input type = "hidden" name = "_token" value = '<?php echo csrf_token(); ?>'>
<table>
<tr>
<td><label>Enter Place Name</label></td>
<td><input type="text" class="form-control" id="placename" name="placename" placeholder="Name Of Place"/></td>
</tr>
<tr>
<td>
<input type="submit" value="Get Message" onclick="getMessage()" />
</td>
</tr>
</table>
<br>
<!--
<div class="panel panel-default table-responsive">
<div id="dataTag"><b>All the Details according to department will be displayed</b></div>
</div>
-->
<div id = 'msg'>This message will be replaced using Ajax.
Click the button to replace the message.</div>
</center>
我不知道为什么当标头包含令牌时它显示 CSRF 令牌不匹配 一旦解决,我可以采取一些实时行动,请帮忙
【问题讨论】:
-
您的代码中的 XSRF-TOKEN 是什么?这 $('meta[name="_token"]').attr('content') 返回令牌吗?为什么是“内容”而不是“价值”?在您的 ajax 中发送正确的数据: $.ajax({data: {_token: $('input[name=_token]').val(), placename: $('input[name=placename]').val() }, type: 'post', url: '...', success: function() {...}}. 使用调试器或 console.log() 仔细检查您发送的数据是否正常,如果有地名和_token。
-
请重写上面的代码,这样我的基础就可以清除了
标签: php ajax laravel-5 csrf csrf-token