当通过AJAX传递给PHP时,传递多维数组会增加其长度

时间:2014-04-29 08:02:36

标签: javascript ajax arrays multidimensional-array

我在javascript中创建了两个数组,即模块和权重。模块数组包含模块ID,权重数组包含相应的权重。我创建了一个多维数组,模块ID作为其键,相应的权重作为其值。到目前为止我做了什么

//module array
modules = [74,82,83]

//weight array
weights = [70,10,20]

//created array
moduleWeights = [74: 70, 82: 10, 83: 20] 

我创建了' moduleWeights'数组由以下代码

 for(i=0;i<modules.length;i++)
   {
     moduleWeightArray[modules[i]] = weights[i]; 
   }

当我通过AJAX将这个数组传递给PHP时,我得到了类似的东西

Array(
   [0] =>
   [1] =>
   [2] => 
   .
   .
   .
   [74] => 70
   .
   .
   [82] => 10
   [83] => 20  
)

即阵列的长度从3增加到84,这是正确的。为什么会这样?我在像这样的帖子请求中传递数组

$.ajax({
                 type: 'POST',
                 url: 'url',
                 data: {data:moduleWeightArray},
                 dataType: 'json',
                 success: function(response)
                          {
                          } 
        })

任何帮助都将受到高度赞赏。 提前致谢

2 个答案:

答案 0 :(得分:2)

你想要的是一个关联的对象,而不是一个数组。当您创建Javascript数组并将其索引74设置为某个值时,在此之前隐含值073。这就是你所看到的。要拥有任意键值关联,您需要一个对象而不是一个数组。

var moduleWeights = { 74 : 70, 82 : 10, 83 : 20 };

答案 1 :(得分:0)

这种情况正在发生,因为您正在使用数组。你可能有

moduleWeightArray = [];

在某处你应该使用

moduleWeightArray = {};

问题在于,当序列化数组时,它总是将所有索引序列化为最大的索引(默认值为undefined)。还有一个JavaScript的奇怪之处。您应该使用对象/字典。