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

使用jsGrid通过Ajax新增数据库行时$_POST变量为空的问题

jsGrid新增数据时JSON错误与参数未定义问题解决

我来帮你搞定这个问题,其实核心是前后端数据格式不匹配,再加上一处逻辑小错误,咱们一步步来修复:

先搞懂错误根源

你现在遇到两个核心问题:

  1. PHP报Undefined index: name/last_name/id:因为前端发的是JSON格式数据,但PHP默认只会解析表单格式的数据到$_POST,JSON数据不会自动存入$_POST,所以拿不到参数。
  2. 前端JSON解析错误:因为PHP里的var_dump($_POST)和Notice错误信息提前输出,导致后端返回的内容不是纯JSON,前端解析时出错。

另外还有个明显的逻辑问题:你用jsGrid的insertItem(新增数据)方法,但后端写的是UPDATE(修改已有数据)语句,两者完全不对应!新增数据应该用INSERT INTO语句。

步骤1:修正前端AJAX请求

你的前端代码里,contentType设为了JSON格式,但data直接传了对象,jQuery会默认把对象转成key=value的表单格式,和你设置的contentType冲突。修改成把对象转成JSON字符串发送:

$(function() { 
    $("#grid").jsGrid({ 
        height: "70%", 
        width: "100%", 
        filtering: true, 
        editing: true, 
        inserting: true, 
        sorting: true, 
        paging: true, 
        autoload: true, 
        controller: { 
            insertItem: function(item) { 
                return $.ajax({ 
                    url: "items.php", 
                    type: "POST", 
                    contentType : "application/json; charset=utf-8", 
                    data: JSON.stringify(item), // 把item转为标准JSON字符串
                    dataType: "json", 
                }); 
            }, 
        }) 
    }) 

步骤2:后端PHP解析JSON数据

PHP不会自动解析JSON格式的POST请求,需要手动从原始输入流读取并解析,同时修正SQL语句为新增逻辑:

switch($_SERVER["REQUEST_METHOD"]) { 
    case "POST": 
        // 读取前端发送的JSON原始数据
        $jsonInput = file_get_contents('php://input');
        $data = json_decode($jsonInput, true);
        
        // 先检查必要参数是否存在,避免Notice错误
        if(!isset($data['name'], $data['last_name'])) {
            http_response_code(400);
            header("Content-Type: application/json");
            echo json_encode(['error' => '缺少必要的name或last_name参数']);
            exit;
        }
        
        // 注意:新增数据用INSERT INTO,不是UPDATE!如果你的id是自增主键,不需要传id
        $result = $bdd->prepare('INSERT INTO t_test (name, last_name) VALUES (:name, :last_name)');
        $executeSuccess = $result->execute([
            'name' => $data['name'],
            'last_name' => $data['last_name']
            // 如果你的id不是自增主键,再加上'id' => $data['id']
        ]);
        
        // 返回纯JSON响应,务必删除所有调试输出(比如var_dump)
        header("Content-Type: application/json");
        echo json_encode(['success' => $executeSuccess]); 
        break; 
}

额外注意事项

  • 调试用的var_dump一定要删掉,不然会破坏JSON响应的纯格式,导致前端解析失败。
  • 如果你的表id字段是自增主键,新增数据时不需要传递id,数据库会自动生成;如果id需要手动指定,再在INSERT语句和execute参数里加上id字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:56:39