javascript数组的一部分未发布到服务器

时间:2014-03-12 15:25:50

标签: javascript jquery

我目前有一个类似于以下内容的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返回数据。

4 个答案:

答案 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

我建议你为你的目的使用一个物体。