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

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。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:22:42