В основном я пытаюсь удалить строку с помощью axios, но я продолжаю получать DELETE 405 (Method Not Allowed)
Это мой маршрут API для удаления:
Route::delete('/vehicles/{id}', [VehiclesController::class, 'destroy']);
В контроллере:
public function destroy($id)
{
$vehicleDelete = Vehicle::findOrFail($id);
$vehicleDelete->delete();
return response()->json([
"status" => true
], 200);
}
Кнопка в интерфейсе:
<button class = 'btn btn-danger' onclick = "deleteBtn(${item.id})">Delete</button>
Я попытался использовать console.info, чтобы убедиться, что я получаю правильный идентификатор, и он действительно получает правильный.
А вот функция axios:
const deleteBtn = (id) => {
axios.delete("api/vehicles/" + id)
.then(response => {
console.info(id);
})
}
@JohnLobo Я попробовал это сейчас, все то же самое
попробуйте добавить return false в конце вашей функции deleteBtn
@apokryfos Ничего не менял
Каков полный URL-адрес, на который попадает этот DELETE запрос? Это может быть неправильный URL-адрес, в зависимости от страницы, с которой вы отправляете запрос. Возможно, вам придется сделать axios.delete(`/api/vehicles/${id}`) (т. е. включить ведущий /).






Попробовав почти все, вот решение, с которым я случайно пришел:
Маршрут API:
Route::delete('/vehicles/{id}', [VehiclesController::class, 'destroy']);
Метод уничтожения в контроллере:
public function destroy($id)
{
$vehicle = Vehicle::find($id);
if (!$vehicle) {
return response()->json(["error" => "Vehicle does not exist!!"]);
}
if ($vehicle->delete()) {
return response()->json(["success" => "Vehicle deleted!!"]);
}
return response()->json(["error" => "Something bad happened!!"]);
}
фронтальная кнопка:
<button class = 'btn btn-danger' onclick = "deleteBtn(${item.id})">Delete</button>
И, наконец, функция javascript:
const deleteBtn = (id) => {
axios.delete(API.url + (API.routes.deleteVehicles.replace("{id}", id)))
.then(response => {
vehicleTable.innerHTML = "";
drawVehicles();
})
}
Для справки вот объект API:
const API = {
url: 'http://127.0.0.1:8000/api',
routes: {
getVehicles: '/vehicles',
deleteVehicles: '/vehicles/{id}',
createVehicles: '/vehicles'
}
}
Хорошее решение! Просто будьте осторожны с жестким кодированием API.url; это может измениться в зависимости от вашего файла .env и config/app.php. Хорошая вещь, которую вы можете сделать, это назвать свои маршруты, например Route::delete(...)->name('api.vehicles.delete'), затем использовать этот URL-адрес в качестве атрибута данных: <button data-url = "{{ route('api.vehicle.delete', ['id' => ':vehicleId']) }}" ...>, а затем в обработчике кликов: axios.delete(button.data('url').replace(':vehicleId', 'id)). Это гарантирует (если не изменено) URL-адрес правильный (использует вашу конфигурацию PHP) и заменяет :vehicleId допустимым целым числом из вашей id переменной JS.
код выглядит хорошо. Попробуйте php artisan route:clear