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

使用jQuery Ajax传递带字母数字键的数组失败求助

问题分析与解决方案

为什么带字符串键的“数组”传不过去?

JavaScript的Array类型是专门为数字索引的有序集合设计的。当你用new Array()创建数组后,给它添加字符串键(比如ArrayAmounts["P1"])时,这些键值对其实是被当作数组对象的自定义属性,而非数组的元素。jQuery的$.ajax在序列化数据时,只会处理数组的数字索引元素,完全忽略这些额外属性,所以PHP那边自然接收不到。

而你用数字索引(ArrayAmounts[0])时,这是标准的数组元素,$.ajax会正确把它序列化为PHP能识别的数组格式,所以能正常传递。

解决方法:改用普通对象存储键值对

既然你需要用字母数字类型的键,直接用JavaScript的普通对象({})就可以了,对象本来就是用来存储任意键名的键值对的。修改后的代码如下:

修改后的JavaScript代码

// 用普通对象替代Array来存储带字符串键的键值对
var ArrayAmounts = {};
ArrayAmounts["P1"] = "16150";
// 也可以用更简洁的字面量写法:
// var ArrayAmounts = { P1: "16150" };

$.ajax({
    url: "myajax",
    cache: false, // *注意这里不要加引号,false是布尔值,加引号会变成字符串"false",起不到禁用缓存的作用*
    type: 'POST',
    data: { Arr: ArrayAmounts },
    success: function(data){
        console.log(data);
    },
    error: function(xhr, AjaxOptions, ThrownError){
        ShowMessage(xhr.responseText);
    }
});

PHP接收代码

在PHP端,你可以直接通过$_POST获取这个对象(PHP会自动解析为关联数组):

// 接收传递过来的关联数组
$amounts = $_POST['Arr'];
// 访问指定键的值
echo $amounts['P1']; // 输出 16150

额外提示

如果之后你需要传递同时包含数字索引和自定义键的集合,也建议用对象来统一存储,避免混淆Array和对象的用法。另外,cache: false不需要加单引号,布尔值直接写false即可,加引号会被当作字符串处理,达不到禁用缓存的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:10:09