Php 通过$.ajax调用将JS数组传递给服务器

Php 通过$.ajax调用将JS数组传递给服务器,php,jquery,ajax,arrays,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(t

以下是我的代码:

    $('#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();
    });
$('#addType')。关于('submit',函数(e){
$form=$(此项);
var类型=[];
$(this).find('input[type=number]')。each(function(){
键入[$(this.attr('id')]=$(this.val();
});
console.log(类型);
$.ajax({
键入:“POST”,
url:“”,
数据:{type:type},
成功:函数(){
$form.find('input[type=submit]')).attr('disabled','disabled');
}
});
e、 预防默认值();
});
如您所见,它从
表单#addType
中的
输入构建了一个javascript数组,并将其发送到一个服务器端脚本以处理该数组。我的问题是没有数据通过
$.ajax({})

更新
它似乎来自数组键的值,而数组键的值通常不能被忽略。如果我将递增的数字作为键,则数组将成功传递。为什么?

使
类型成为对象,而不是数组:

var type = { };
您将
类型
创建为一个数组(使用
[]
)。数组也是一个对象,因此可以向其中添加命名成员,这是在循环中执行的操作:

type['my-item-id'] = xxx;
但是当您将
type
变量添加到Ajax请求中时,jQuery会检查该变量是否是一个数组,因此它会通过数组遍历
type
,因此它会使用
type.length
查找它的“数字索引”项(添加none时为0):


类型
设置为对象,而不是数组:

var type = { };
您将
类型
创建为一个数组(使用
[]
)。数组也是一个对象,因此可以向其中添加命名成员,这是在循环中执行的操作:

type['my-item-id'] = xxx;
但是当您将
type
变量添加到Ajax请求中时,jQuery会检查该变量是否是一个数组,因此它会通过数组遍历
type
,因此它会使用
type.length
查找它的“数字索引”项(添加none时为0):


类型
设置为对象,而不是数组:

var type = { };
您将
类型
创建为一个数组(使用
[]
)。数组也是一个对象,因此可以向其中添加命名成员,这是在循环中执行的操作:

type['my-item-id'] = xxx;
但是当您将
type
变量添加到Ajax请求中时,jQuery会检查该变量是否是一个数组,因此它会通过数组遍历
type
,因此它会使用
type.length
查找它的“数字索引”项(添加none时为0):


类型
设置为对象,而不是数组:

var type = { };
您将
类型
创建为一个数组(使用
[]
)。数组也是一个对象,因此可以向其中添加命名成员,这是在循环中执行的操作:

type['my-item-id'] = xxx;
但是当您将
type
变量添加到Ajax请求中时,jQuery会检查该变量是否是一个数组,因此它会通过数组遍历
type
,因此它会使用
type.length
查找它的“数字索引”项(添加none时为0):



它起作用了!所以用Ajax传递给服务器的数据不能是数组?它必须是一个对象?@Steve它可以是数组或对象。我试图在答案中添加解释。欢迎接受,谢谢!:-)@史蒂夫-不,数组很好,但是数组不能有命名属性。(嗯,可以,但不会连载)。非常感谢您的解释。你的答案被接受了,它有效!所以用Ajax传递给服务器的数据不能是数组?它必须是一个对象?@Steve它可以是数组或对象。我试图在答案中添加解释。欢迎接受,谢谢!:-)@史蒂夫-不,数组很好,但是数组不能有命名属性。(嗯,可以,但不会连载)。非常感谢您的解释。你的答案被接受了,它有效!所以用Ajax传递给服务器的数据不能是数组?它必须是一个对象?@Steve它可以是数组或对象。我试图在答案中添加解释。欢迎接受,谢谢!:-)@史蒂夫-不,数组很好,但是数组不能有命名属性。(嗯,可以,但不会连载)。非常感谢您的解释。你的答案被接受了,它有效!所以用Ajax传递给服务器的数据不能是数组?它必须是一个对象?@Steve它可以是数组或对象。我试图在答案中添加解释。欢迎接受,谢谢!:-)@史蒂夫-不,数组很好,但是数组不能有命名属性。(嗯,可以,但不会连载)。非常感谢您的解释。您的答案已被接受。JavaScript没有关联数组。数组只能有数字索引。另外,为什么不直接使用
.serializeArray()
?只需将表单作为jQuery对象传递,您就可以准备好发布数据了。JavaScript没有关联数组。数组只能有数字索引。另外,为什么不直接使用
.serializeArray()
?只需将表单作为jQuery对象传递,您就可以准备好发布数据了。JavaScript没有关联数组。数组只能有数字索引。另外,为什么不直接使用
.serializeArray()
?只需将表单作为jQuery对象传递,您就可以准备好发布数据了。JavaScript没有关联数组。数组只能有数字索引。另外,为什么不直接使用
.serializeArray()
?只需将表单作为jQuery对象传递,就可以发布数据了。