通过$ .ajax调用将JS Array传递给服务器

时间:2014-03-20 10:09:31

标签: php jquery ajax arrays

这是我的代码:

    $('#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。如果我将增加的数字作为键,则数组成功传递。怎么样?

1 个答案:

答案 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] ...