【发布时间】:2017-01-25 03:33:51
【问题描述】:
我正在尝试使用 ajax 将数据发布到 Laravel 后端,但是我收到“CSRF 令牌不匹配”错误。
首先,我在 html 中放置了标记(在正文中但在其表单之外,因为它不是整个表单,它只有 2 个要发布的元素):
<input type="hidden" name="_token" id="token" value="{{ csrf_token() }}">
然后在“文档准备好”中,我尝试使用 ajax 发布数据。
data["_token"] = jQuery('#token').val();
// Also tried this:
jQuery.ajaxSetup({
headers: {
'X-CSRF-TOKEN': jQuery('#token').val()
}
})
console.log(data) // returns the array with _token: "esOKmY8Tpr4UvhTYMhWcWui0rpvYEjJ3es7ggics"
jQuery.ajax({
type: "POST",
url: '/my-route',
data: data,
success: function() {
console.log("A");
}
});
我要发布的数据是较大表单的一小部分,使用这种方法,我可以自动完成表单。一小部分 html 输入不在任何其他子表单中。也许是这种情况?
- Form:
- A: bla // to be posted
- B: hello // to be posted
- C: smt else // no post
但获取值工作正常
路线:
Route::post('/my-route', 'AdminController@theFunction')->middleware('admin');
编辑:我把<input>改成了<meta>标签
【问题讨论】:
-
你能告诉我们你的路线吗?
-
这个问题看起来像 Origin Policy 是错误的。在正常情况下,Laravel CSRF 应该是开箱即用的,没有任何技巧。
-
管理员中间件是否进行了重定向?
-
我最终取消了管理页面的 csrf。
标签: javascript php jquery ajax laravel