使用get方法从表单输入传递数组

时间:2010-11-26 18:35:18

标签: jquery ajax forms

我使用get方法从表单输入(复选框)传递数组。 在ajax中进行时,使用:

var subcat_checked = new Array();
$.each($("input[name='subcategories']:checked"), function() {
    subcat_checked.push($(this).val());
});
$.ajax({
    type: 'GET',
    url: '{% url view-category root_category.slug %}',
    data: {subcat: subcat_checked},
    success: function(result) {
        /* stuff */
    },
    dataType: 'json'
});

如果没有选中复选框,则变量键为'subcategories';如果选中某些复选键,则为'subcategories []'。

现在,当使用非ajax表单发送它并检查一些复选框时,变量键是'categories'(最后没有[])。

因为如果禁用javascript我想使用非ajax表单作为后备,我想在选中某些复选框时使用相同的键。

有人知道我该怎么做吗?

由于

2 个答案:

答案 0 :(得分:0)

试试这个:

var subcat_checked = $("input[name='subcategories']:checked").serializeArray();

$.ajax({
    type: 'GET',
    url: '{% url view-category root_category.slug %}',
    data: {subcat: subcat_checked},
    success: function(result) {
        /* stuff */
    },
    dataType: 'json'
});

答案 1 :(得分:0)

这是jQuery 1.4+中的更改,但您可以使用traditional option撤消它以获取旧的非[]序列化,如下所示:

$.ajax({
    traditional: true,
    type: 'GET',
    url: '{% url view-category root_category.slug %}',
    data: {subcat: subcat_checked},
    success: function(result) {
        /* stuff */
    },
    dataType: 'json'
});

您可以在the $.param() docs中了解有关该选项的更多信息(将对象作为data属性传递时最终调用的内容)....但基本上它完全符合您的要求,留下{{ 1}}关闭。