我想通过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发送此数组的正确方法是什么?
答案 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.contact
和info.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"]}}