【问题标题】:Laravel 5.2 ajax CSRFLaravel 5.2 ajax CSRF
【发布时间】:2016-04-27 01:24:40
【问题描述】:

我正在尝试使用 ajax 向 laravel 发布帖子。使用 get 方法时它可以正常工作,但使用 POST 时,它会失败。

代码如下: 在我的 app.blade 上,我放了:

<meta name="csrf-token" content="{{ csrf_token() }}" />

在我的 view.blade 上,我有以下 ajax 代码:

$(document).ready(function() {
    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    });
    $('#employeeActivityTable').DataTable( {
        ajax: {
                url: "{!! route('ajaxactivityperemployee') !!}",
                type: "POST"
            },
        columns: [
            { data: 'employee_id', name: 'employee_id' },
            { data: 'employee_name', name: 'employee_name' },
            { data: 'month', name: 'month' },
            { data: 'sum_task_hour', name: 'sum_task_hour' }
            ],
        columnDefs: [
            {
                "targets": [ 0 ],
                "visible": false,
                "searchable": false
            }
            ]
    } );
...

我知道我的路线可以正常工作,因为我使用 GET 获得了一切,并且工作正常,我只将其更改为 POST,然后我进入了疑难解答工具:

Failed to load resource: the server responded with a status of 500 (Internal Server Error)

这是我的路线:

//Employee activity
Route::get('employeeactivity', ['uses'=>'EmployeeActivityController@getView','as'=>'employeeactivity']);

//AJAX
//Activity per employee
Route::get('activityperemployee', ['uses'=>'Ajax\ActivityAjaxController@getActivityPerEmployee','as'=>'ajaxactivityperemployee']);
Route::get('activityperproject', ['uses'=>'Ajax\ActivityAjaxController@getActivityPerProject','as'=>'ajaxactivityperproject']);
Route::post('activityperemployee', ['uses'=>'Ajax\ActivityAjaxController@postActivityPerEmployee']);

这里是 ajax 控制器:

public function getActivityPerEmployee()
{
    $return = $this->activityRepository->getActivityPerEmployee();
    $data = Datatables::of($return)->make(true);
    return $data;
}
public function postActivityPerEmployee(Request $request)
{
    $where = [['col'=>'employee_id','val'=>'13'],['col'=>'month','val'=>'Jan']];
    $return = $this->activityRepository->getActivityPerEmployee($where);
    $data = Datatables::of($return)->make(true);
    return $data;
}
public function getActivityPerProject()
{
    $return = $this->activityRepository->getActivityPerProject();
    $data = Datatables::of($return)->make(true);
    return $data;
}

再次,如果在 ajax 请求中,我将类型从 POST 更改为 GET,一切正常。

【问题讨论】:

  • 500 错误意味着你的服务器有问题,你能告诉我们你的路由和控制器操作吗?
  • 查看 Laravel 日志以获取 500 错误的详细信息。
  • 在使用uses时可能需要as键?

标签: laravel


【解决方案1】:

您正在尝试向 Get Route 发送 Post 请求。

{!! route('ajaxactivityperemployee') !!}"

相关路线是:

Route::get('activityperemployee', ['uses'=>'Ajax\ActivityAjaxController@getActivityPerEmployee','as'=>'ajaxactivityperemployee']);

因此,在您的情况下,您可以这样做(为您的发布路线命名):

Route::post('activityperemployee','uses'=>'Ajax\ActivityAjaxController@postActivityPerEmployee', 'as'=>'postajaxactivityperemployee']);

然后在你的 ajax 调用中使用你的新命名路由:

{!! route('postajaxactivityperemployee') !!}"

这将调用postActivityPerEmployee 操作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-08
    • 2016-12-29
    • 2016-12-10
    • 2017-08-23
    • 1970-01-01
    • 2016-07-17
    • 2017-01-08
    • 2023-03-10
    相关资源
    最近更新 更多