本文介绍如何将为多个输入框(如 50 行商品信息)逐个发起 ajax 请求的低效写法,重构为仅用一个通用事件监听 + 单次请求逻辑的高性能方案,显著减少 http 开销并提升可维护性。
在实际开发中,当表单包含大量动态行(例如 50+ 行采购/销售明细)时,若为每行 productCode 输入框单独绑定 change 事件并调用独立的 AJAX 函数(如 getDataFromServer1()、getDataFromServer2()…),不仅代码冗余、难以维护,还会造成严重的性能隐患:每输入一次就触发一次请求,极易引发并发阻塞、服务端压力激增,甚至触发浏览器同源请求限制。
✅ 正确做法是:统一事件委托
+ 动态上下文识别 + 单一 AJAX 函数复用。
// ✅ 统一事件监听(支持未来动态追加行)
jQuery(document).on('change', '.product-code', function() {
const $this = jQuery(this);
const PID = $this.val().trim();
const itemId = $this.data('id'); // 获取当前行号
const nextItemId = itemId + 1;
if (PID && !isNaN(itemId)) {
getDataFromServer(PID, itemId);
// 自动聚焦下一行(边界需校验,如:if (nextItemId <= 50))
jQuery(`#productCode_${nextItemId}`).focus();
}
});
// ✅ 单一函数处理所有行
function getDataFromServer(PID, itemId) {
$.ajax({
type: "POST",
url: "response.php",
data: { pro_id: PID },
dataType: "json", // ⚠️ 推荐直接设为 json,避免手动 parse
success: function(res) {
if (res && res.pro_name !== undefined) {
$(`#productName_${itemId}`).val(res.pro_name);
$(`#productOnHand_${itemId}`).val(res.pro_quantity || 0);
$(`#price_${itemId}`).val(parseFloat(res.pro_price) || 0);
$(`#quantity_${itemId}`).val(1);
// 可选:触发本行小计计算
calculateRowTotal(itemId);
}
},
error: function(xhr) {
console.warn(`获取商品 ${PID} 数据失败:`, xhr.statusText);
alert("商品信息加载异常,请检查编号是否正确");
}
});
}
// 示例:行级小计计算(可根据需要扩展)
function calculateRowTotal(itemId) {
const qty = parseFloat($(document).find(`#quantity_${itemId}`).val()) || 0;
const price = parseFloat($(document).find(`#price_${itemId}`).val()) || 0;
$(`#total_${itemId}`).val((qty * price).toFixed(2));
} false, 'message' => '无效商品编号']);
exit;
}
// 查询数据库...
echo json_encode([
'success' => true,
'pro_name' => $row['name'],
'pro_quantity' => (int)$row['onhand'],
'pro_price' => (float)$row['price']
]);
?>通过以上重构,50 行表单从 50 个独立请求 → 1 个可复用函数 + 智能事件分发,代码量减少 80%+,维护成本大幅降低,同时为后续功能扩展(如实时校验、错误高亮、撤销操作)打下坚实基础。
# php
# css
# jquery
# js
# json
# ajax
# 编码
# 浏览器
# app
# if
# 委托
# 并发
# 事件
# dom
# this
# input
# http
# 重构
# 小计
# 输入框
# 绑定
# 复用
# 行号
# 表单
# 服务端
# 多个
# 还会
相关文章:
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
实例解析Array和String方法
网站微信制作软件,如何制作微信链接?
网站制作员失业,怎样查看自己网站的注册者?
如何通过云梦建站系统实现SEO快速优化?
如何高效生成建站之星成品网站源码?
百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?
常州企业网站制作公司,全国继续教育网怎么登录?
如何挑选高效建站主机与优质域名?
简历在线制作网站免费版,如何创建个人简历?
如何用美橙互联一键搭建多站合一网站?
如何通过FTP空间快速搭建安全高效网站?
官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站
如何快速搭建高效服务器建站系统?
建站主机选哪家性价比最高?
如何基于云服务器快速搭建个人网站?
独立制作一个网站多少钱,建立网站需要花多少钱?
建站之星在线版空间:自助建站+智能模板一键生成方案
如何正确下载安装西数主机建站助手?
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
建站之星与建站宝盒如何选择最佳方案?
Python文件管理规范_工程实践说明【指导】
如何通过VPS建站无需域名直接访问?
微信小程序 五星评分(包括半颗星评分)实例代码
如何快速搭建二级域名独立网站?
广州建站公司哪家好?十大优质服务商推荐
SQL查询语句优化的实用方法总结
盘锦网站制作公司,盘锦大洼有多少5G网站?
如何通过虚拟主机空间快速建站?
天津个人网站制作公司,天津网约车驾驶员从业资格证官网?
建站之星展会模版如何一键下载生成?
常州自助建站费用包含哪些项目?
建站VPS配置与SEO优化指南:关键词排名提升策略
常州自助建站工具推荐:低成本搭建与模板选择技巧
网站设计制作企业有哪些,抖音官网主页怎么设置?
建站上市公司网站建设方案与SEO优化服务定制指南
建站主机如何选?性能与价格怎样平衡?
如何通过智能用户系统一键生成高效建站方案?
实现点击下箭头变上箭头来回切换的两种方法【推荐】
如何通过cPanel快速搭建网站?
免费制作小说封面的网站有哪些,怎么接网站批量的封面单?
测试制作网站有哪些,测试性取向的权威测试或者网站?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
相册网站制作软件,图片上的网址怎么复制?
如何解决VPS建站LNMP环境配置常见问题?
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
python的本地网站制作,如何创建本地站点?
如何快速启动建站代理加盟业务?
青浦网站制作公司有哪些,苹果官网发货地是哪里?
如何高效利用200m空间完成建站?
*请认真填写需求信息,我们会在24小时内与您取得联系。