这是我的代码:
$('#addType').on('submit', function(e) {
$form = $(this);
var type = [];
$(this).find('input[type=number]').each(function() {
type[$(this).attr('id')] = $(this).val();
});
console.log(type);
$.ajax({
type: 'POST',
url: '<?php echo $this->url(array(), 'addType');?>',
data: {type: type},
success: function() {
$form.find('input[type=submit]').attr('disabled','disabled');
}
});
e.preventDefault();
});
如您所见,它从input
中的form#addType
构建一个javascript数组,并将其发送到应该处理此数组的服务器端脚本。我的问题是没有数据通过$.ajax({})
传递。
它似乎来自数组键的值,不能通过litteral。如果我将增加的数字作为键,则数组成功传递。怎么样?
答案 0 :(得分:3)
使type
成为对象,而不是数组:
var type = { };
您创建了type
作为数组(使用[]
)。 Array也是一个对象,因此您可以向其中添加命名成员,这就是您在循环中所做的事情:
type['my-item-id'] = xxx;
但当您将type
变量添加到Ajax请求时,jQuery会检查该变量是否为数组,因此它通过数组迭代type
,所以它使用type.length
查找它的“数字索引”项目(由于你没有添加,它是0):
for (var i = 0; i < type.length; i++)
... type[i] ...
当您创建type
作为对象(使用{}
)时,jQuery会发现它应该在type
上迭代一个对象并执行此操作并“看到”“named” “项目:
for (var i in type)
... type[i] ...