【发布时间】:2018-06-03 17:14:25
【问题描述】:
我很难让 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 调用的 iof 设置为 POST,永远不会触发调试,并且请求似乎没有成功。自然这听起来像是 CRSF 问题,但我在标头中包含了 CRSF 令牌。
【问题讨论】:
-
您不必在数据对象中传递
_token。 CSRF 令牌通过$.ajaxSetup()自动添加到标头中。能否发一张网络请求的截图? -
您可以在表单标签中发布您的代码吗?
-
你检查过控制台吗?
-
1.您的令牌为
CSRF_TOKEN,您可以在ajaxSetup()中使用它,无需再次从元标记中查找它。 2.您将令牌发送到ajaxSetup(),无需再次发送到您的data。 3.你只需要在你做PATCH,DELETE等时包含_method- 不要将它用于简单的POSTs。 4. 可能不重要,但AFAIK thedataTypeshould be lower case - 即json。 5. 最后,实际问题是什么?您是否在 devtools 中看到请求/响应,它们看起来还可以吗?storage/logs/laravel.log呢?