Laravel 5.4 Ajax请求报错:Category did not created 问题求助
让我帮你一步步拆解这个问题,看完你的代码后,我发现了几个关键的错误点,咱们逐个解决:
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>
修复后完整流程说明
- 点击「Create」按钮触发Ajax请求
- 正确传递CSRF Token和分类名称
- 控制器接收Ajax请求,验证后插入数据库
- 插入成功返回success响应,失败则返回带异常信息的error响应
- 前端控制台打印对应的提示信息
内容的提问来源于stack exchange,提问作者Shahzaib Imran

