购物车折扣输入框修改时全部产品同步更新的问题修复咨询
问题分析与解决方案
问题根源
你的代码虽然获取了当前修改的输入框$this,但后续冗余的逻辑错误收集了所有折扣输入框的值,且未正确仅传递当前修改的输入框数据,导致后端收到所有产品的折扣信息,进而同步更新全部产品折扣。
修改后的代码
$(function() { $(document).on('input', '.dto', function(e){ e.preventDefault(); const $this = $(this); // 仅序列化当前触发修改的输入框,生成对应name和value的请求数据 const formData = $this.serializeArray(); const url = "update_cart.ini.php"; $.ajax({ url: url, type: "POST", data: formData, cache: false, }) .done(function(data) { const res = JSON.parse(data); if(res.status){ $('.alert-success').fadeIn(); $('.alert-success').html(res.message).delay(2000).fadeOut(2000); } else { $('.alert-danger').fadeIn(); $('.alert-danger').html(res.message).delay(2000).fadeOut(2000); } }) .fail(function( jqXHR, textStatus ) { // 保留调试代码方便问题排查(按需启用) // alert("Ajax Request fail"); // console.log(jqXHR.responseText); // console.log("Request failed: " + textStatus ); }) }); });
关键修改点
- 移除遍历所有
dtoupdate输入框的冗余代码,不再收集全部产品折扣值 - 使用
const声明局部变量$this和formData,避免全局变量污染 - 仅序列化当前触发事件的输入框,确保Ajax请求只携带当前修改的产品折扣数据
额外提示
后端update_cart.ini.php需要支持识别单个dtoupdate[xxx][...]格式的参数(其中xxx为产品ID,比如输入框name中的3、6、10),并仅更新对应ID的产品折扣,确保后端逻辑与前端请求匹配。
内容的提问来源于stack exchange,提问作者J. Mick
相关产品推荐
相关产品推荐

