我很难获得一个ajax帖子与laravel v5.5.24一起使用。这是我的ajax调用的样子:
var CSRF_TOKEN = $('meta[name="csrf-token"]').attr('content');
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax({
url: "/postCustomer?XDEBUG_SESSION_START=19683",
type: 'POST',
data: {_token: CSRF_TOKEN, message:myData, "_method": 'POST'},
dataType: 'JSON',
success: function (data) {
console.log('call to postCustomer successful');
}
});
这是我的路线:
Route::post('/postCustomer','AdminUserController@store');
关于这个问题的有趣之处在于,当所有帖子都被改为get(在ajax调用和路由中)时,请求到达并正确处理。调试被触发,一切都很顺利。但是,如果将路由和ajax调用设置为POST,则永远不会触发调试,并且请求似乎没有成功。当然,这有点像CRSF问题,但我在头文件中包含了CRSF令牌。
答案 0 :(得分:0)
如果.blade.php文件中的javascript代码试试这个
data: {_token:'{{ csrf_field() }}', message:myData, "_method": 'POST'},
希望得到帮助
答案 1 :(得分:0)
试试这个,
<meta name="_token" content="{!! csrf_token() !!}"/>
$.ajaxSetup({
headers:
{'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')}
});
$.ajax({
url: "/postCustomer?XDEBUG_SESSION_START=19683",
type: 'POST',
data: {message:myData, "_method": 'POST'},
dataType: 'JSON',
success: function (data) {
console.log('call to postCustomer successful');
}});
无需再次在ajax数据中传递令牌。
答案 2 :(得分:0)
衷心感谢所有回复的人。有几件事情帮助我解决这个问题。首先,我整合了CSRF令牌提及, 并限制我作为数据发送的内容 - 如果你在ajaxSetup中执行它,则不需要在数据中包含CSRF令牌。第二件事从我的帖子中看不到,但是我遇到了涉及触发ajax事务的按钮的竞争条件。该按钮导致页面重新加载之前,ajax可以做到这一点,这就是为什么偶尔会出现这种情况,但大多数情况下都不行。所以返回false是必要的,以防止 - 可能不是在两个地方,但肯定在调用ajax事务后我们正在等待回调。有效的代码可以在下面找到。我希望这会阻止别人花一夜疯狂试图弄清楚他们的POST不起作用。拿走积分:在ajaxSetup调用中处理你的CSRF,并从整个业务中返回false。
再次感谢大家。
-George Pipkin 弗吉尼亚州阿夫顿
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax({
/* the route pointing to the post function */
url: "/postCustomer?XDEBUG_SESSION_START=19159",
type: 'POST',
/* send the csrf-token and the input to the controller */
data: {message:myData},
dataType: 'json',
/* remind that 'data' is the response of the AjaxController */
success: function (data) {
$("#success_msg").show();
return false;
}
});
return false;
答案 3 :(得分:0)
您必须在数据对象内部传递_token。
data: {_token:'{{ csrf_token() }}',, message:myData, "_method": 'POST'},