You need to enable JavaScript to run this app. CodeIgniter捐赠商店加购异常:仅首个分类可成功,其余分类请求失败
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter捐赠商店加购异常:仅首个分类可成功,其余分类请求失败

异常根因
  • 页面内重复定义同ID元素,导致选择器取值完全错误
    HTML规范要求ID属性全局唯一,你在循环生成商品卡片时,所有商品的数量输入框都固定使用id="quantity"、商品ID隐藏域固定使用id="cat_id"、加购按钮固定使用id="add_cart"。jQuery的$("#xxx")选择器永远只会匹配DOM中第一个出现的对应ID元素,而这个元素属于默认显示的第一个分类面板。第一个分类之所以能正常运行,就是因为它的元素刚好是选择器第一个匹配的目标,取值完全正确;而切换到其他分类点击加购时,脚本拿到的永远是第一个分类第一个商品的ID和输入值,无法匹配当前点击的商品,自然触发请求失败。
  • AJAX配置与后端返回格式不匹配
    前端AJAX设置了dataType: "json",但控制器在AJAX请求分支中直接返回纯字符串'true',不属于合法JSON格式。jQuery会因解析JSON失败直接走error回调,哪怕后端逻辑正常执行,前端也会弹出失败提示。
  • 事件绑定缺少上下文关联
    按钮直接绑定全局sendToCart()方法,没有把当前点击的元素传入方法,方法本身无法感知当前操作的是哪张商品卡片,也无法获取对应卡片内的输入值。
修复方案

1. 消除ID冲突,改用类名做元素标识

把循环生成的重复ID全部替换为类名,避免选择器匹配错误:

  • 数量输入框:移除id="quantity",替换为class="form-control item-quantity"
  • 商品ID隐藏域:移除id="cat_id",替换为class="form-control item-cat-id"
  • 加购按钮的点击事件改为传入当前元素:onClick="sendToCart(this);"

2. 统一前后端数据格式

二选一即可:

  • 把AJAX的dataType: "json"改为dataType: "text",匹配后端返回的纯文本格式
  • 或者修改控制器返回值,在AJAX分支中返回合法JSON:echo json_encode(['code' => 200, 'msg' => 'success']);,与前端的JSON解析配置匹配

3. 重写提交脚本,基于当前卡片上下文取值

修改后的脚本直接从点击按钮所属的卡片容器内取对应的值,不会误取其他分类的元素值:

function sendToCart(btnEl) {
    // 定位到当前按钮所属的商品卡片
    const cardContainer = $(btnEl).closest('.flip-card');
    // 在当前卡片范围内取值,杜绝跨卡片取值错误
    const targetCatId = cardContainer.find('.item-cat-id').val();
    const inputQty = cardContainer.find('.item-quantity').val();

    // 基础合法性校验
    if (!inputQty || parseInt(inputQty) < 1) {
        alert('请输入大于0的有效数量');
        return;
    }

    $.ajax({
        type: "POST",
        url: "<?php echo $url ?>",
        data: { 
            '<?php echo $this->security->get_csrf_token_name(); ?>': '<?php echo $this->security->get_csrf_hash(); ?>', 
            cat_id: targetCatId, 
            quantity: inputQty, 
            ajax: '1' 
        },
        dataType: "text",
        cache: false,
        success: function(response) {
            if (response.trim() === 'true') {
                alert("success");
                location.reload();
            } else {
                alert("failure");
            }
        },
        error: function() {
            alert("failure");
        }
    });
    return false;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 02:06:10