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

Ajax或数据库异常:Ajax回调赋值input字段失败求助

解决Ajax回调为数组输入框赋值失败的问题

看起来你被这个问题卡了好几天,我帮你梳理下代码里的核心问题,再给出修复方案:

问题根源分析

  1. 异步回调的索引丢失:Ajax是异步操作,当success回调执行时,外层的each循环已经跑完了,此时的idx已经不是当前请求对应的索引,导致你没法精准定位到要赋值的那个accname[]输入框。
  2. 选择器范围错误:$('[name="accname[]"]').val(val)会给所有名为accname[]的输入框设置同一个值,而不是对应位置的那一个。
  3. 冗余选择器:循环里用$('[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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:50:21