首页 > 解决方案 > 即使 url、路由器和控制器指向同一个地方,Laravel 和 Ajax 也会根据请求返回 404

问题描述

如您所见,一切都已正确路由,我还有其他功能可以执行类似的操作并且工作正常,但我不断收到此错误:

POST http://localhost:8000/apagados/4 404(未找到)

删除 http://localhost:8000/apagados/4 404(未找到)

    //Buttons
    <button id="{{'botRestaurarProjeto'.$apagado['id']}}" value="{{$apagado['id']}}" class="botRestaurarProjeto rounded bg-blue-300 text-white p-2">Restaurar</button>
    <button id="{{'botEliminarProjeto'.$apagado['id']}}" value="{{$apagado['id']}}" class="botEliminarProjeto rounded bg-red-700 text-white p-2">Excluir</button>

<script>
    $(document).on("click", ".botRestaurarProjeto", function () {
        let id = $(this).val();
        $.ajax({
            method: 'POST',
            url: "apagados/"+id,
            data: {
                "id": id,
            },
            success: function(result) {
                location.reload();
            },
            error: function(jqXHR, testStatus, error) {
                // console.log(jqXHR.responseText);
                console.log(testStatus);
                console.log(error);
            }
        });
    });

    //AJAX
    $(document).on("click", ".botEliminarProjeto", function () {
        let id = $(this).val();
        if(confirm("Deseja apagar definitivamente?") == true){
            $.ajax({
                method: 'DELETE',
                url: "apagados/"+id,
                data: {
                    "id": id,
                    _method: 'DELETE'
                },
                success: function() {
                    $("#lixo"+id).hide();
                },
                error: function(jqXHR, testStatus, error) {
                    console.log(jqXHR.responseText);
                }
            });
        }
    });
</script>
//ProjetoController
public function eliminar($id)
{
    $projeto = Projeto::find($id)->withTrashed();
    $projeto->forceDelete();
}

public function restaurar($id)
{
    $projeto = Projeto::find($id)->withTrashed();
    $projeto->restore();
}

//Router
Route::delete('apagados', [ProjetoController::class, 'eliminar'])->name('posts.eliminar'); 
Route::post('apagados', [ProjetoController::class, 'restaurar'])->name('posts.restaurar');

标签: ajaxlaravelroutes

解决方案


http://localhost:8000/apagados/4正如您指定的那样,它不是有效的路线:

Route::delete('apagados', [ProjetoController::class, 'eliminar'])->name('posts.eliminar'); 
Route::post('apagados', [ProjetoController::class, 'restaurar'])->name('posts.restaurar');

所以,有效的 URL 是http://localhost:8000/apagados. 如果您希望它按预期工作,则必须将路线更改为:

Route::delete('apagados/{id}', [ProjetoController::class, 'eliminar'])->name('posts.eliminar'); 
Route::post('apagados/{id}', [ProjetoController::class, 'restaurar'])->name('posts.restaurar');

阅读更多关于Route.


推荐阅读