当我使用带有以下ajax请求的POST方法时,它会抛出一个"方法不允许"错误。如果我在不使用ajax的情况下使用表单POST,则会转到正确的方法。
在Router.php中:
$this->post('TestPost','DashboardController@TestPostMethod');
在View中,ajax请求是:
$.ajax(
{
type: "POST",
url: 'TestPost',
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
cache: false,
success: function (data) {
alert('hid post');
SetHotandWorstData(data,'hotquantity');
},
error: function (msg) {
alert('error');
alert(msg.responseText);
}
});
在控制器中:
function TestPostMethod(Request $request)
{
$hotworstsalesdata = DB::table('100_INVOICEDETAIL')
->select( '100_INVOICEDETAIL.ITEMCODE','100_INVOICEDETAIL.ITEMNAME',
DB::raw('SUM("100_INVOICEDETAIL"."QTY") as
salesqty'), DB::raw('SUM("100_INVOICEDETAIL"."AMT") as salesamt'))
->groupBy('100_INVOICEDETAIL.ITEMCODE','100_INVOICEDETAIL.ITEMNAME')
->orderBy('salesqty')
->take(10)
->get();
return Datatables::of($hotworstsalesdata)->make(true);
}
答案 0 :(得分:4)
你应该在POST数据中传递“_token”。 Laravel使用令牌进行跨站点请求伪造(CSRF)攻击。在AJAX请求中使用以下代码
data: { _token: "{{ csrf_token() }}" }
更新回答:
我已经使用laravel 5.4在我的系统上重新创建了相同的场景,它正在为我工作。
我的路线(web.php)代码是:
Route::post('/test_post', 'DashboardController@getData');
Javascript代码是:
<script type="text/javascript">
$.ajax({
type: "POST",
url: '{{ url('/') }}/test_post',
data: { _token: "{{ csrf_token() }}" },
contentType: "application/json; charset=utf-8",
dataType: "json",
cache: false,
success: function (data) {
console.log(data);
},
error: function (msg) {
console.log(msg.responseText);
}
});
</script>
DashboardController文件是:
public function getData(Request $request) {
print_r($request);
}
答案 1 :(得分:0)
最近我用DELETE
方法出错了!我通过在html标头中设置csrf token
来修复并进入ajax。希望这可以解决你的问题..
<html>
<header>
<meta name="csrf-token" content="{{ csrf_token() }}" />
在ajax中,
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});