通过$ .post发送多维数组

时间:2015-02-24 15:35:57

标签: javascript jquery post

我有一个多维数组,我通过$ .each

填充
$('.gBook').click(function(){
        var values = [];
        var valueToPush = { }; // or "var valueToPush = new Object();" which is the same
        var i = 0;
        $('td[data-check="true"]').each(function(){
                valueToPush["price"] = $(this).attr("data-price");
                valueToPush["id"] = $(this).attr("data-id");
                values.push(valueToPush);
                i++;
        });

        var arrayToSend = {values};

        $.post( '<?php echo PATH;?>ajax/updateRoom.php',values, function(data){
                if(data != "ERROR"){
                    $('#all-content').html(data).css("overflow-y","auto");
                }else{
                    alert("ERROR");
                }
        });
    });

但所有POST变量的结果都是一样的:

Array (
  [values] => Array (
   [0] => Array ( [price] => 15 [id] => 3380 )
   [1] => Array ( [price] => 15 [id] => 3380 )
   [2] => Array ( [price] => 15 [id] => 3380 )
  ) 
) 

我的错误在哪里?似乎每次都“推”覆盖?

2 个答案:

答案 0 :(得分:4)

这一行:

var valueToPush = { };

在你的循环之外。

所以你:

  1. 创建一个对象
  2. valueToPush
  3. 中添加对它的引用
  4. 将值放入其中
  5. 将对它的引用复制到数组
  6. 转到3
  7. 你只有一个对象,你在数组中只有多个引用。

    每次循环时都需要创建一个新对象。

    $('td[data-check="true"]').each(function(){
        var valueToPush = {};
        valueToPush["price"] = $(this).attr("data-price");
    

答案 1 :(得分:0)

你的每个循环应该看起来像这样:

$('td[data-check="true"]').each(function(){
     values.push({
        price: $(this).attr("data-price"),
        id: $(this).attr("data-id")
     });
 });

您需要在每次迭代中插入一个新对象。目前,您正在将对单个对象的引用插入到数组中。