如何在JS

时间:2017-02-28 07:53:47

标签: javascript jquery arrays javascript-objects

我想通过AJAX发送多级数组。所以我试着制作一个物体对象如下:

var info = {};

info.pickup = {};
info.pickup.contact = {};
info.pickup.items_quantity = {};
info.pickup.items = {};

info.delivery = {};
info.delivery.contact = {};
info.delivery.level = {};

然后我开始填充对象,例如:

$('.operation-create .pickup .contact-details').each(function () {
    var arr = {};
    arr['contact_name'] = $(this).find('input[name="pickup-contact-name"]').val();
    arr['contact_phone'] = $(this).find('input[name="pickup-contact-phone"]').val();
    arr['pickup-suburb'] = $(this).find('select[name="pickup-suburb"]').val();
    arr['single-pickup-address'] = $(this).find('input[name="single-pickup-address"]').val();
    info.pickup.contact.push(arr);
});
info.pickup.push(info.pickup.contact);

等...

然而不幸的是它并没有奏效。我收到这个错误:

  

info.pickup.contact.push不是函数

我应该在这做什么?通过AJAX发送此数组的正确方法是什么?

5 个答案:

答案 0 :(得分:4)

您需要一个数组作为值

info.delivery.contact = [];
//                      ^^

最后一行

info.pickup.push(info.pickup.contact);

没有意义,因为你在这个对象中有属性。要推送某些值,您需要一个数组

info.pickup = [];
//            ^^

有一段时间你已经拥有了info.pickup.contact的数组,你可以跳过这一行

  

<击> info.pickup.push(info.pickup.contact);

答案 1 :(得分:3)

info.pickup.contact = {};

这是一个对象声明,而不是数组。

数组应该是

info.pickup.contact = [];  // `[]`

答案 2 :(得分:3)

了解对象和数组之间的区别非常重要。

{}创建一个普通对象,它没有push方法。

[]创建一个数组,该数组是一个具有其他功能的对象,包括push方法。

查看您的代码,在至少,您希望info.pickup.contactinfo.delivery.contact成为数组(我猜可能是items_quantity和{{ 1}},但是很难确定)。 (在循环函数中调用items的东西不是数组,也不需要。)

所以至少:

arr

info.pickup.contact = [];
// -------------------^^

您还想删除最后的info.delivery.contact = []; // ---------------------^^ ; info.pickup.push(info.pickup.contact);不是数组,您已将联系人放在info.pickup

旁注:您的代码也可能受益于使用对象初始值设定项:

info.pickup.contact

......但这是一种风格问题。

答案 3 :(得分:2)

正如其他答案所述,您需要将contact从对象(即{})更改为数组([])。

另请注意,您可以使用jQuery的map()来构建数组并使代码更简洁:

info.pickup.contact = $('.operation-create .pickup .contact-details').map(function () {
  return {
    contact_name: $(this).find('input[name="pickup-contact-name"]').val(),
    contact_phone: $(this).find('input[name="pickup-contact-phone"]').val(),
    pickup-suburb: $(this).find('select[name="pickup-suburb"]').val(),
    single-pickup-address: $(this).find('input[name="single-pickup-address"]').val()
  }
}).get();

答案 4 :(得分:1)

您需要一个数组才能将元素推入其中。在这里它是对象,所以很明显你不可能添加。

如果你想添加,那就把它变成像

那样的数组
info.pickup.contact = [];

现在,如果你添加,那么它将接受。添加后,您的数组将如下所示..

info.pickup.contact = [];
info.pickup.contact.push("Sample");

{"pickup":{"contact":["Sample"]}}