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

JQGrid内联编辑CRUD操作自定义提示异常问题求助

我来帮你搞定这个JQGrid自定义提示的问题!你的思路是对的,但在几个关键环节没处理到位,导致自定义提示没正常工作,咱们一步步来修正:

问题分析
  1. PHP端未正确输出JSON响应:你的testing方法只是return json_encode($output),但前端需要的是直接输出的JSON内容,不是返回给框架的变量;而且数据库出错时,框架可能直接抛出了HTML错误页面,根本没走到你的自定义逻辑。
  2. JS端缺少异常处理:如果后端返回的不是合法JSON(比如HTML错误页),JSON.parse会报错,导致提示失效。
  3. 内联编辑的配置位置:要确保afterSubmit正确绑定到新增、编辑、删除各自的配置项里。
修正后的代码

1. PHP端代码(关键修正)

<?php
public function testing() {
    // 先设置响应头为JSON格式,告诉前端解析方式
    header('Content-Type: application/json');
    
    try {
        // 这里要使用前端提交的实际数据,不是硬编码值
        $data = array(
            'first_name' => $_POST['first_name'],
            'surname' => $_POST['surname'],
            'username' => $_POST['username'] // 注意你之前写的注释是password,这里变量名是username,建议统一
        );
        
        $this->db->insert('Users', $data);
        $affectedRows = $this->db->affected_rows();
        
        if ($affectedRows > 0) {
            $output['status'] = true;
            $output['message'] = "记录创建成功!";
        } else {
            $output['status'] = false;
            $output['message'] = "未创建任何记录,请检查提交数据。";
        }
    } catch (Exception $e) {
        // 捕获所有异常,避免框架直接输出HTML错误页
        $output['status'] = false;
        // 给用户友好提示,详细错误可以自己记录日志
        $output['message'] = "创建失败:数据验证错误或服务器异常";
        // log_message('error', 'DB Insert Error: ' . $e->getMessage()); // 可选:记录详细错误到日志
    }
    
    // 必须echo输出JSON,而不是return
    echo json_encode($output);
    exit; // 终止后续输出,防止框架额外输出内容破坏JSON格式
}
?>

2. JS端代码(完善配置)

要把afterSubmit分别绑定到内联编辑的新增、编辑、删除配置中,同时增加异常处理:

$("#your-grid-id").jqGrid({
    // 你的网格基础配置...
    inlineEditing: {
        // 新增操作的配置
        addOptions: {
            afterSubmit: function(response, postdata) {
                try {
                    var result = JSON.parse(response.responseText);
                    // 返回格式:[是否成功, 提示消息, 新增行ID(不需要则传null)]
                    return [result.status, result.message, null];
                } catch (e) {
                    // 解析失败时(比如后端返回HTML错误),返回自定义提示
                    return [false, "新增失败:服务器返回异常响应", null];
                }
            }
        },
        // 编辑操作的配置
        editOptions: {
            afterSubmit: function(response, postdata) {
                try {
                    var result = JSON.parse(response.responseText);
                    return [result.status, result.message, null];
                } catch (e) {
                    return [false, "更新失败:服务器返回异常响应", null];
                }
            }
        },
        // 删除操作的配置
        delOptions: {
            afterSubmit: function(response, postdata) {
                try {
                    var result = JSON.parse(response.responseText);
                    return [result.status, result.message, null];
                } catch (e) {
                    return [false, "删除失败:服务器返回异常响应", null];
                }
            }
        }
    }
});
额外注意事项
  • 检查浏览器开发者工具的Network标签,查看请求的响应内容,确认后端返回的是纯JSON,没有多余的空格、HTML标签。
  • 如果用的是CodeIgniter等框架,确保控制器方法没有其他输出(比如调试用的echo),否则会破坏JSON格式。
  • 可以给JQGrid加上ajaxEditOptions: { contentType: "application/x-www-form-urlencoded" }(默认就是这个),确保请求格式和后端接收一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:34:59