簡體   English   中英

Laravel 5通過ajax發出DELETE請求 - 不允許使用方法

[英]Laravel 5 making DELETE request by ajax - method not allowed

我正在嘗試使用ajax在Laravel應用程序中發出DELETE請求

我有一個函數將請求 - 使用正確的動詞 - 發送到資源但不允許持續出現的方法:

這是我的ajax請求:

$.ajax({
            type: 'DELETE',
            url:'/user/58',
            data: {
                '_method': 'DELETE',
                'id': id
            },
            dataType: 'json',
            success: function (data) {
                // do something with ajax data
                if (data.result) {
                    return true;
                }

                return false;

            },
            error: function (xhr, ajaxOptions, thrownError) {
                console.log('error...', xhr);
                return false;
                //error logging
            },
            complete: function () {
                //afer ajax call is completed
            }
        });

id在函數內提供,測試為58。

在Chrome瀏覽器中觀看網絡面板我可以看到它以user/58的預期網址開頭但隨后很快縮短為user

我知道要獲取資源路由來獲取請求,它需要是user/58和DELETE方法,所以它將轉到destroy方法,因此它被路由到索引方法,因為它需要GET請求方法不允許。

為什么我的請求網址被更改?

在Laravel中發出DELETE請求的正確方法是什么?

謝謝

編輯:這是我的路線:

Route::group( [ 'middleware' => [ 'auth' , 'admin' ] ] , function ()
{
Route::resource( 'user' , 'UserController' );
} );

csrf令牌正在標題中處理 - 相當肯定這不是問題的原因,因為我沒有得到無效的令牌異常

$.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    });

謝謝

在這里可能發生的兩件事情,我需要在比評論更長的帖子中寫這個,所以希望我做對了。

在我腦海中浮現的第一件事是在執行ajax請求時失敗的驗證檢查。 如果你沒有足夠的權利,至少我會將你重定向回主資源。

但是,我的第二個猜測可能更有可能。 您是否想過需要使用ajax請求發送的X-CSRF-TOKEN? 請參閱https://laravel.com/docs/5.2/routing#csrf-x-csrf-token


來自文檔:

除了檢查CSRF令牌作為POST參數之外,Laravel VerifyCsrfToken中間件還將檢查X-CSRF-TOKEN請求頭。 例如,您可以將令牌存儲在“meta”標記中:

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

創建元標記后,您可以指示像jQuery這樣的庫將標記添加到所有請求標頭中。 這為基於AJAX的應用程序提供了簡單,方便的CSRF保護:

$.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM