1

Estoy queriendo hacer un recuadro de confirmación utilizando sweetalert text antes de ejecutar la funcionalidad de eliminación dentro de mi proyecto. Pero me sale este error en consola al momento de dar click en uno de los botones de eliminar:

DELETE http://127.0.0.1:8000/misLibros 405 (Method Not Allowed)

Intenté utilizar fetch para enviar el id del elemento que el usuario seleccionó para eliminar. Este es el codigo JS:

btnEliminar.forEach(element => {

    element.addEventListener('click', (e) => {
        swal({
            title: "¿Estás seguro de querer eliminar tu libro?",
            text: "Una vez eliminado no habrá forma de restaurarlo.",
            icon: "warning",
            buttons: true,
            dangerMode: true,
        })
            .then((willDelete) => {
                if (willDelete) {
                    let id = e.target.value
                    fetch(`/eliminar/${id}`, {
                        method:'DELETE',
                        headers: {
                            'Content-Type':'application/json',
                            'X-CSRF-TOKEN': csrfToken,
                        },
                    })
                } else {
                    swal("Has cancelado la eliminación de tu libro :)");
                }
            });
    })

})

Esto apunta a una ruta, es esta: Route::delete('/eliminar/{id}',[BookController::class,'delete'])->name('eliminar');

Y este es el controlador:

 public function delete($id)
    {
        $libro = Book::find($id);
        if ($libro) {
            $libro->delete();
            return redirect()->back();
        } else {
            return response()->json(['message' => 'Libro no encontrado'], 404);
        }
    }

Y luego de varios intentos, noté que el error estaba en el redirect() ya que cuando reinicio la pagina veo que realmente sí elimina el elemento...Pero por qué me arroja ese error? En este caso, como haría para devolverme a la misma pagina y así mostrar un mensaje como por ejemplo "Libro eliminado exitosamente".

4
  • El error 405 (Method Not Allowed) se refiere a que existe la ruta en el servidor pero no el método GET, POST, etc, en tu caso el DELETE. Yo lo que hago en estos casos es simplificar la función (que retorne un json con un "OK") y pruebo desde el postman, de esta forma valido que es posible llegar al endpoint
    – Yussef
    Commented el 30 mar. a las 6:33
  • Entonces, en lugar de retornar una redirección en el controlador de eliminar libros como lo estoy haciendo, dices que retorne un json?. Es así o me equivoco?. Porque lo que quiero hacer es simplemente redirigir al usuario a la misma página donde precionó el botón de eliminar y mostrale un mensaje.
    – Mattteuz
    Commented el 30 mar. a las 14:33
  • 1
    Si, pero solo a modo de prueba. Así validas que la petición se resuelve bien, luego la vuelves a dejar como estaba. Porque a mi no me hace sentido el error 405 con un problema en el redirect
    – Yussef
    Commented el 30 mar. a las 18:43
  • Ya lo hice y mira que si retorna el json...Es decir, si se ejecuta el controlador hasta el final sin ningún problema, ahora lo que hice fue enviar un json en respuesta al fecth para así recargar la misma pagina y mostrar los datos actualizados jaja. Pero si es por el redirect, porque lo quite y retorné un "response()" en su lugar y funciona, entonces no sabría cual podría ser el causante del error por agregar el redirect.
    – Mattteuz
    Commented el 31 mar. a las 16:25

0

Examina otras preguntas con la etiqueta o formula tu propia pregunta.