Ajax或数据库异常:Ajax回调赋值input字段失败求助
解决Ajax回调为数组输入框赋值失败的问题
看起来你被这个问题卡了好几天,我帮你梳理下代码里的核心问题,再给出修复方案:
问题根源分析
- 异步回调的索引丢失:Ajax是异步操作,当
success回调执行时,外层的each循环已经跑完了,此时的idx已经不是当前请求对应的索引,导致你没法精准定位到要赋值的那个accname[]输入框。 - 选择器范围错误:
$('[name="accname[]"]').val(val)会给所有名为accname[]的输入框设置同一个值,而不是对应位置的那一个。 - 冗余选择器:循环里用
$('[name="acccode[]"]').eq(idx).val()获取值完全没必要,直接用$(this).val()就可以,更高效也更清晰。
修复后的代码
$('[name="acccode[]"]').each(function(idx, val) { // 直接用当前元素获取编码值,避免重复选择DOM var acccode = $(this).val(); // 提前保存当前索引对应的accname输入框,闭包会保留这个引用 var $targetInput = $('[name="accname[]"]').eq(idx); console.log("当前处理的编码:", acccode); $.ajax({ url: "<?php echo base_url(); ?>readacccode", type: "POST", data: "Acc_Code=" + acccode, dataType: "JSON", success: function(data) { // 假设返回的results里是单个匹配的名称,直接取第一个即可(如果是多个结果,按需调整) if (data.results && data.results.length > 0) { var accName = data.results[0]; console.log("获取到的名称:", accName); // 给提前保存的对应输入框赋值 $targetInput.val(accName); } else { console.warn("没有找到对应编码的名称"); $targetInput.val(""); // 无数据时清空输入框 } }, // 加上错误回调,方便排查请求问题 error: function(xhr, status, error) { console.error("Ajax请求失败:", error); console.error("响应内容:", xhr.responseText); } }); });
额外调试小技巧
- 打开浏览器开发者工具的Network标签,查看
readacccode请求的响应,确认返回的data.results格式是否和你预期一致。 - 检查
accname[]输入框的数量是否和acccode[]完全匹配,否则eq(idx)可能找不到对应的元素。 - 如果后端返回的
data.results是单个对象而非数组,直接用data.results代替data.results[0]即可。
内容的提问来源于stack exchange,提问作者user2531242
相关产品推荐
相关产品推荐

