You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel项目中DELETE请求被识别为GET的问题求助

解决Laravel删除模态框的GET方法不支持问题

核心问题分析

你的代码存在几个关键问题,导致请求被错误识别为GET:

  1. 动态表单的Blade指令未解析:@csrf和@method("DELETE")是服务器端Blade指令,直接写在JS字符串里不会被解析为隐藏输入框,导致Laravel无法识别DELETE请求方法。
  2. HTML语法错误:表单代码存在多余字符和引号错误,导致表单渲染异常。
  3. JS选择器转义错误:选择器中的转义字符导致submit事件未正确绑定,可能触发表单默认提交行为。

步骤1:修复动态表单生成逻辑

由于表单是JS动态生成的,不能直接使用Blade指令,需手动添加CSRF令牌和DELETE方法字段:

  1. 确保页面头部已包含CSRF meta标签(Laravel默认已添加):
<meta name="csrf-token" content="{{ csrf_token() }}">
  1. 修改JS中生成表单的代码,替换@csrf和@method为手动创建的隐藏输入框:
// 获取CSRF令牌
var csrfToken = $('meta[name="csrf-token"]').attr('content');
// 生成表单HTML
var formHtml = '<form id="delete-form-' + dataResult.data[i].id + '" action="/inventario/' + dataResult.data[i].id + '" method="POST" class="d-inline">' +
    '<input type="hidden" name="_token" value="' + csrfToken + '">' +
    '<input type="hidden" name="_method" value="DELETE">' +
    '<div class="modal-footer">' +
    '<button type="button" class="btn btn-secondary" data-dismiss="modal">Cancelar</button>' +
    '<button class="btn btn-primary" type="submit" style="padding-left: 6px">Aceptar</button>' +
    '</div>' +
'</form>';

注意:删除了原代码中Cancelar按钮后的多余+号,修复了Aceptar按钮的引号错误。


步骤2:修复JS事件绑定选择器

将选择器中的转义字符修正为标准格式,确保事件能正确绑定:

$(document).on('submit', 'form[id^="delete-form-"]', function(e) {
    e.preventDefault();

    console.log('Entrado al submit del form de eliminar disco');
    var form = $(this);
    var url = form.attr('action');

    $.ajax({
        type: 'POST',
        url: url,
        data: form.serialize(), 
        success: function(data) {
            form.closest('tr').remove();
            Swal.fire({
                icon: 'success',
                title: 'Disco eliminado',
                showConfirmButton: false,
                timer: 1500
            });
        },
        error: function(jqXHR, textStatus, errorThrown) {
            Swal.fire({
                icon: 'error',
                title: 'Error al eliminar disco',
                showConfirmButton: false,
                timer: 1500
            });
        }
    });
});

步骤3:调整控制器destroy方法的响应

由于是AJAX请求,返回JSON响应而非重定向,避免不必要的页面跳转:

public function destroy(Inventario $inventario)
{
    // 修正:根据外键关联删除图片(假设ImagenInventario的外键是inventario_id)
    ImagenInventario::where('inventario_id', $inventario->id)->delete();
    
    $inventario->delete();

    return response()->json(['success' => true], 200);
}

原代码中ImagenInventario::findOrFail($inventario->id)逻辑错误,会查找ID等于Inventario ID的图片,应改为根据外键关联删除。


步骤4:验证路由配置

确保你的web.php路由中DELETE路由正确:

Route::delete('/inventario/{id}', [InventarioController::class, 'destroy'])->middleware('auth');

完成以上修改后,请求会正确携带_method=DELETE参数,Laravel将识别为DELETE请求,解决方法不支持的错误。

内容的提问来源于stack exchange,提问作者Raúl García

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 06:37:04