Karenderia多餐厅系统添加食品选项时遇Ajax错误求助
排查Karenderia多餐厅系统添加食品选项时的Ajax错误
我在使用Karenderia Multiple Restaurant System时,尝试给食品项添加一个「Non Veg」的额外选项,已经完成了以下操作:
- 在
food-item-add.php中添加了以下代码:
<div class="uk-form-row"> <label class="uk-form-label uk-h3"><?php echo t("Food Type")?></label> <div class="clear"></div> <ul class="uk-list uk-list-striped"> <li> <?php if(!isset($data['non_veg'])){ $data['non_veg']=''; } echo CHtml::checkBox('non_veg', $data['non_veg']==2?true:false ,array( 'class'=>"icheck", 'value'=>2 ))?> <?php echo t("Non Veg")?> </li> </ul> </div>
- 在
AjaxAdmin.php的FoodItemAdd函数中添加:
'non_veg'=>isset($this->data['non_veg'])?$this->data['non_veg']:1,
- 在
table_structure.php的"CREATE TABLE IF NOT EXISTS ".$table_prefix."item"语句中添加:
`non_veg` int(1) NOT NULL DEFAULT '1',
但提交添加选项时出现了Ajax错误,错误信息如下:
Uncaught ReferenceError: data is not defined at Object.error (admin.js?ver=1:290) at c (jquery-1.10.2.min.js:4) at Object.fireWith [as rejectWith] (jquery-1.10.2.min.js:4) at k (jquery-1.10.2.min.js:6) at XMLHttpRequest.r (jquery-1.10.2.min.js
问题分析与排查步骤
1. 先解决前端admin.js的直接错误
这个错误提示非常明确:admin.js第290行的error回调里尝试使用了未定义的data变量。你可以直接打开admin.js找到对应的代码块,通常会是类似这样的结构:
$.ajax({ // 请求配置 error: function(xhr, status, error) { // 这里误用了未声明的data变量 alert(data.message); } });
修正方法:
把错误回调里的data替换成Ajax回调提供的合法参数,比如用xhr.responseText查看后端返回的具体内容,或者直接显示错误状态:
error: function(xhr, status, error) { alert('请求失败: ' + error + '\n后端响应: ' + xhr.responseText); }
这样修改后,你能看到更具体的错误原因,方便后续排查。
2. 检查后端接口的响应合法性
Karenderia的Ajax接口要求返回标准JSON格式(包含success、message等字段),如果后端处理non_veg参数时出错,可能返回PHP错误信息而非合法JSON,进而触发前端的error回调。
排查方法:
- 打开浏览器开发者工具(F12),切换到「Network」标签;
- 提交食品项添加请求,找到对应的Ajax请求(通常路径是
index.php?r=ajaxadmin/fooditemadd); - 查看「Response」标签的内容:
- 如果显示PHP语法错误/数据库错误,说明
AjaxAdmin.php的FoodItemAdd函数有问题,比如参数处理语法错误、数据库插入语句没包含non_veg字段; - 如果返回的不是JSON格式,需要调整后端代码确保输出合法JSON。
- 如果显示PHP语法错误/数据库错误,说明
3. 确认数据库字段是否生效
table_structure.php通常只在系统安装/升级时执行,手动修改后可能不会自动同步到数据库:
- 登录数据库管理工具(比如phpMyAdmin),查看你的
item表(前缀根据你的系统设置)是否存在non_veg字段; - 如果没有,手动执行SQL语句添加:
ALTER TABLE `your_table_prefix_item` ADD `non_veg` int(1) NOT NULL DEFAULT '1';
(把your_table_prefix替换成你系统的实际表前缀)
4. 验证表单参数传递
在浏览器开发者工具的「Network」标签中,查看请求的「Form Data」:
- 勾选「Non Veg」时,确认
non_veg=2是否被正确提交; - 未勾选时,该参数不会被提交,后端设置的默认值
1会生效,这部分你的代码是正确的。
内容的提问来源于stack exchange,提问作者Ranjit
相关产品推荐
相关产品推荐

