簡體   English   中英

Laravel Ajax 刪除:405 錯誤 - 方法不允許

[英]Laravel Ajax Delete: 405 Error - Method Not Allowed

我知道有幾篇關於使用 AJAX 刪除的 405 錯誤的帖子。 但是,我發現的帖子中的所有解決方案都不適合我。

我有一個表,其中顯示了我數據庫的 Machine 表中的所有機器。 在每一行都有一個刪除按鈕來刪除機器,如下所示:

<button class="btn btn-small btn-danger delete-machine"
    type="button"
    title="Delete Machine"
    machine-id="{{ $value->machineId }}">
    <span class="glyphicon glyphicon-trash"></span> 
</button>

單擊按鈕時,將執行以下 javascript,它調用控制器中的 destroy 方法從數據庫中刪除機器:

$(document).on('click', ".delete-machine", function() {
    let button = $(this);
    let id = $(this).attr('machine-id');
    let tr = $(this).closest('tr');
    let didConfirm = confirm("Are you sure you want to permanently delete this machine?");

    if (didConfirm) {
        $.ajax({
            type: 'DELETE',
            url: 'machines/' + id,
            data: {
                '_token' : $('input[name="_token"]').val(),
                'id' : id
            },
            success: function(response) {
                if (response.didSucceed) {
                    tr.remove();

                    let flashMessage = '<div class="alert alert-success alert-block"><button type="button" class="close" data-dismiss="alert">×</button><strong>'
                        + response.message + 
                        '</strong></div>';
                    $('#flash-message').append(flashMessage);
                } else {
                    let flashMessage = '<div class="alert alert-error alert-block"><button type="button" class="close" data-dismiss="alert">×</button><strong>'
                        + response.message + 
                        '</strong></div>';
                    $('#flash-message').append(flashMessage);
                }
            },
            error: function (response) {
                console.log('Error:', response);             
            }
        });
    }
});

我的控制器是資源控制器。 這是路線:

Route::resource('machines', 'Machine\MachineController');

這是來自被調用的控制器的銷毀方法。 它首先從用戶訂閱表中刪除所有引用機器的行。 然后,它刪除機器:

public function destroy($id)
{
    $userMachineSubscriptions = UserMachineSubscription::where('machine_id', $id)->get();

    foreach($userMachineSubscriptions as $userMachineSubscription) {
        $userMachineSubscription->delete();
    }

    $userMachineSubscriptions = UserMachineSubscription::where('machine_id', $id)->count();

    if ($userMachineSubscriptions <= 0) {
        $machine = Machine::find($id);

        if ($machine->delete()) {
            $message = 'Machine "' . $machine['name'] . '" successfully deleted!';
            return response()->json(['didSucceed' => 'true', 'message' => $message]);
        } else {
            $message = 'Machine "' . $machine['name'] . '" was not deleted.';
            return response()->json(['didSucceed' => 'false', 'message' => $message]);
        }
    } else {
        $message = 'Error performing cascading delete on user subscriptions. Machine was not deleted.';
        return response()->json(['didSucceed' => 'false', 'message' => $message]);
    }
}

當我運行 php artisan route:list 時,我看到了我的路線:

Method: DELETE
URI: machines/{machine}
Middleware: web, auth
Name: machines.destroy
Action: App\Http\Controllers\Machine\MachineController@destroy

我做錯了什么? 使用 Laravel 5.4。

...

另外,順便提一下,我是網絡開發的新手,所以如果有人看到我的代碼中有任何可以改進的地方,我願意學習:) 例如,我有點不喜歡我在上面顯示 Flash 消息的方法成功。 我為幾個 ajax 請求執行此操作,並希望我可以只執行 session::flash 或其他操作,而不是將 html 附加到我的主刀片布局中的 div。 但是,我似乎找不到更好的方法來做到這一點。

UDPATE:已解決。 只需要清除路由緩存。 :(

php artisan route:list

請參閱,如果路由中允許您嘗試發送的 DELETE 請求。 您也可以嘗試route:clear. 清除路由緩存。

如果您使用 IIS,請嘗試編輯 C:\\Windows\\System32\\inetsrv\\config 中的 applicationHost.config。 添加動詞

<add name="PHP_via_FastCGI1" path="*.php" verb="GET,HEAD,POST,DELETE,PATCH,PUT" modules="FastCgiModule" scriptProcessor="C:\Program Files (x86)\iis express\PHP\v7.4\php-cgi.exe" resourceType="Either" />
<add name="PHP_via_FastCGI" path="*.php" verb="GET,HEAD,POST,DELETE,PATCH,PUT" modules="FastCgiModule" scriptProcessor="C:\Program Files\PHP\v7.4\php-cgi.exe" resourceType="Either" />
<add name="PHP53_via_FastCGI" path="*.php" verb="GET,HEAD,POST,DELETE,PATCH,PUT" modules="FastCgiModule" scriptProcessor="C:\Program Files (x86)\PHP\v5.3\php-cgi.exe" resourceType="Either" />

暫無
暫無

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

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