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

Laravel 5.4 Ajax请求报错:Category did not created 问题求助

排查Laravel 5.4分类创建Ajax请求失败问题

让我帮你一步步拆解这个问题,看完你的代码后,我发现了几个关键的错误点,咱们逐个解决:

1. 按钮选择器不匹配(最直接的触发原因)

你的HTML里创建按钮的ID是create,但Ajax代码里绑定的点击事件是#add-order——这意味着你点击「Create」按钮时,根本不会触发Ajax请求,反而会直接提交表单走非Ajax的逻辑,所以才会返回"Category did not created"的错误响应。

修复方法:
把Ajax里的按钮选择器改成和HTML匹配的#create:

$('#create').click(function(e) {
    // 后续代码不变
});

2. CSRF Token传递错误

Laravel的CSRF验证要求表单字段名必须是_token,但你Ajax里传递的键是token,这会直接触发CSRF验证失败,请求被框架拦截。

修复方法:
修改Ajax的data参数,把token改成_token:

var data = { create_category: inputcreate_category, _token: token };

3. 数据库插入格式错误

DB::table('tbl_smscategories')->insert($category_name)这里犯了一个基础错误:insert方法需要接收关联数组(键对应数据库字段名,值对应要插入的数据),但你直接传了字符串$category_name,这会触发数据库报错,而且当前代码不管插入成功与否都会返回success,完全没处理异常情况。

修复方法:
假设你数据库表中存储分类名称的字段是category_name(如果不是请替换成实际字段名),修改插入逻辑并增加异常捕获:

function create_category(Request $request){
    if($request->ajax()){
        $category_name = $request->input('create_category');
        try {
            // 用关联数组传递插入数据
            DB::table('tbl_smscategories')->insert([
                'category_name' => $category_name
            ]);
            $response = array(
                'status' => 'success',
                'msg' => 'Category created successfully',
            );
        } catch (\Exception $e) {
            // 捕获插入失败的异常,返回错误信息
            $response = array(
                'status' => 'error',
                'msg' => 'Category did not created: ' . $e->getMessage(),
            );
        }
        return Response::json($response);
    }else{
        $response = array(
            'status' => 'error',
            'msg' => 'Category did not created',
        );
        return Response::json($response);
    }
}

4. Ajax的dataType设置错误

你把Ajax的dataType设为html,但控制器返回的是JSON格式数据,这会导致你需要手动解析字符串。更合理的是直接设置为json,jQuery会自动帮你解析成JSON对象。

修复方法:
修改Ajax配置,同时建议用路由生成URL避免硬编码路径不一致:

var request = $.ajax({
    url: "{{ route('createcategory') }}", // 用路由生成正确URL
    type: "POST",
    data: data,
    dataType: "json", // 改为json类型
});
// 同时修改done回调,无需手动解析
request.done(function(response) {
    console.log(response.msg);
});

5. HTML表单的冗余问题

你的表单里重复写了两次method="post",这是无效的,建议删掉其中一个:

<form method="post" action="{{ route('createcategory') }}" enctype="multipart/form-data">
    {{ csrf_field() }}
    <!-- 其他表单内容不变 -->
</form>

修复后完整流程说明

  1. 点击「Create」按钮触发Ajax请求
  2. 正确传递CSRF Token和分类名称
  3. 控制器接收Ajax请求,验证后插入数据库
  4. 插入成功返回success响应,失败则返回带异常信息的error响应
  5. 前端控制台打印对应的提示信息

内容的提问来源于stack exchange,提问作者Shahzaib Imran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:53:08