我目前有一个类似于以下内容的javascript数组:
Array[
0: "text1"
1: "text2"
2: "text3"
app_name: "text4"
]
奇怪的是,当我将它打印到控制台时,数组只显示它包含3个项目。 Array[3]
但显然它有4个项目。
当我对此数据执行ajax发布时,app_name
未传输到服务器。这是因为它是一个对象而不是一个数组?如果是这样,我将如何发布到服务器。我不一定也需要发布数字索引,只需要关联项是最好的。
ajax代码:
$.ajax({
url: path + "my/api/path",
data: {"data": myarray},
dataType: 'json',
type: 'POST',
success: function(res) {
console.log(res);
}
});
编辑:我也应该提到我正在使用jQuery的handontable插件。这是我们getData
函数从spreadsheeet返回数据。
答案 0 :(得分:3)
虽然JavaScript 中的数组是对象,但并不意味着将命名属性分配给数组,就像使用app_name
一样。
数组 length 将始终仅报告正确的数字索引元素(属性)的数量,而不报告它具有的任何命名属性。
同样的问题适用于JSON序列化:JSON序列化程序不会序列化数组的命名属性,因为JSON没有命名数组属性的概念。
为了您的理智,我建议完全避免在数组上使用命名属性(有时候和地方有用,但你必须真正知道你在做什么)。我可能会建议您重新编写代码:
var thing = {
arr: [ 'text1', 'text2', 'text3' ],
app_name: 'text4'
}
答案 1 :(得分:0)
使用JSON对象。
var obj = {
app_name: "text4",
items: ["text1", "text2", "text3"]
};
答案 2 :(得分:0)
数组计数从0索引开始,因此,显示的数组[3]是正确的。 要将app_data发布到服务器,您必须将app_data分配给索引然后尝试,就像这样 3:app_data 因为数组定义仅用于索引而不是字符串。
希望这有助于!!!答案 3 :(得分:0)
数组仅考虑带有数字和正数索引的条目。 length属性将等于最大索引+ 1.如果你这样做:
var arr = [];
arr[20] = 'twenty';
您会看到arr.length
为21,前20个条目为undefined
。
我建议你为你的目的使用一个物体。