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

如何通过JavaScript & AJAX提交HTML表单数组字段至PHP Post

问题分析与修正方案

你的代码存在几个关键问题:

  1. 动态键名与取值错误:你把键名和值都写成了字符串字面量,无法解析变量key,也取不到输入框的实际值。
  2. AJAX请求重复发送:循环里每次发起请求效率极低,应该收集所有值后一次性发送。
  3. 变量作用域与逻辑混乱:key未声明会变成全局变量,且toadd的定义和重置逻辑混乱。

修正后的高效代码

function standardSave() {
    // 获取所有name为standardname[]的输入框
    var names = document.getElementsByName('standardname[]');
    // 收集所有输入值的数组
    var standardValues = [];

    // 遍历输入框,收集每一项的值
    for (var key = 0; key < names.length; key++) {
        standardValues.push(names[key].value);
    }

    // 一次性发送所有数据到PHP
    $.ajax({
        type: "post",
        url: "draftsave.php",
        // 打包成对象,PHP端可直接通过$_POST['standard']拿到数组
        data: { standard: standardValues },
        success: function(result) {
            // 可添加成功后的处理逻辑,比如提示保存完成
            console.log('保存成功:', result);
        },
        error: function(xhr, status, error) {
            // 处理请求失败的情况
            console.error('保存失败:', error);
        }
    });
}

针对你错误行的单独修正(不推荐多次请求)

如果一定要在循环里逐个发送(不建议,因为会产生多次HTTP请求),错误行需改成:

// 用字符串拼接生成动态键名,同时去掉值的引号获取实际输入内容
var toadd = {};
toadd["standard[" + key + "]"] = names[key].value;

若环境支持ES6,也可以用计算属性名简化:

var toadd = { [`standard[${key}]`]: names[key].value };

PHP端接收示例

如果用一次性发送数组的方式,PHP里可以这样处理:

// 获取前端传递的数组
$standards = $_POST['standard'];
// 遍历处理每个值
foreach ($standards as $value) {
    // 你的业务逻辑
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 16:22:41