【问题标题】:Ajax error when trying to delete something尝试删除某些内容时出现 Ajax 错误
【发布时间】:2018-09-24 18:50:23
【问题描述】:

我在尝试创建删除选项时遇到以下错误:

POST 419 (unknown status)

AJAX ERROR: {readyState: 4, getResponseHeader: ƒ, getAllResponseHeaders: ƒ, setRequestHeader: ƒ, overrideMimeType: ƒ, …}

我想知道代码有什么问题?我是 AJAX 和 JSON 的新手,所以我不太确定哪里出了问题,但我有一种小事可以解决它的感觉。

$('[data-js-type=modal-submit]').on('click', function(e) {
    $.ajax({
        url: "deleteCategory",
        method: "POST",
        dataType: "json",
        data: { id: $("[data-js=open-remove]").find('span').attr('id') },
        success: function(result) {
            console.log("Success : ", result);
            if (result.Success) {
                //Reload the Page 
                document.location.reload(true);
            } else if (result.Error) {
                console.log('Error From the Sever ', result.Error);
            }
        },
        error: function(error) {
            console.log("AJAX ERROR: ", error);
        }
    });
});

Route::post('/deleteCategory', 'CategoryController@removeCategory')->name('category.delete');

    public function removeCategory(Request $request) {
        //Find the Category 
        $category = Category::findOrFail($request->id);

        //Delete the Category 
        $category->delete();

        //Session Message 
        session()->flash('Success', 'Categorie: ' . $category->name . ' is removed');

        return json_encode(['Success' => 'Categorie: ' . $category->name . ' is 
        removed']);
   }

【问题讨论】:

    标签: json ajax laravel


    【解决方案1】:

    与 GET 请求不同,laravel 中的 POST / PUT / DELETE / CREATE 请求要求您在请求中传递 CSRF 令牌 - 这是 419 错误的最常见原因:

    $.ajax({
        ...
        data: {
            '_token': '{{ csrf_token() }}'
            ...
        }
    });
    

    或者,您可以在所有请求的标头中设置它:

    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': '{{ csrf_token() }}'
        }
    });
    

    如果此 Javascript 代码不在刀片中,您可以将其转储到刀片中的某个位置,可能是 <meta> 标记并通过 jQuery 访问它:

    <meta name="csrf_token" content="{{ csrf_token() }}">
    var token = $('meta[name="csrf_token"]').attr('content');
    

    我不推荐的最后一个选项是在app\Http\Middleware\VerifyCsrfToken 中禁用对该路由的检查:

    protected $except = [
        'deleteCateogory'
    ];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-30
      • 1970-01-01
      • 2012-05-30
      • 1970-01-01
      • 2014-06-10
      • 2014-12-02
      • 2015-12-08
      • 1970-01-01
      相关资源
      最近更新 更多