用jquery post发送的数组

时间:2012-02-15 09:51:24

标签: jquery asp.net-mvc-2

我尝试使用$.post()将数组发送到我的方法但是我有点失去了如何解决这个问题。

我正在获取表单之外的复选框的值,并将它们传递给我的方法。

我尝试使用.serializeArray()& .serialize()但是会​​收到错误

  

list.serializeArray不是函数

我只是发送数组我得到空值。

HTML

<form....><input type="submit" value="submit" id="click_post" /></form>

<div id="container">
        <input type="checkbox" value="2,3" name="checkbox" />
        <input type="checkbox" value="4,5" name="checkbox" />
        <input type="checkbox" value="6,7" name="checkbox" />
</div>

JQUERY

$('#click_post').click(function () {
                var list = new Array();
                $('#container input[type="checkbox"]').each(function () {
                    list.push($(this).val());
                });

                var $form = $(this).closest('form');
                $.post($form.attr('action'), { value: list }, function (data) {
                    alert('test');
                });
            });

方法

public ActionResult PassArray(string[] value){//doing some logic here}

3 个答案:

答案 0 :(得分:0)

serializeserializeArray应该应用于jQuery对象而不是简单数组,例如:

var serialized_data = $form.serialize();

传递给$.post的数据应为:

  

数据随请求发送到服务器的地图或字符串。

所以你应该改变PassArray方法参数。

<小时/> 您还可以在表单外部序列化数据:

var serialized_data = $('#container input:checkbox').serialize();

答案 1 :(得分:0)

<击>     $('#click_post')。click(function(){         var $ form = $(this).closest('form');         $ .post($ form.attr('action'),$ form.serialize(),function(data){             警报( '试验');         });     });

<击>

并将操作参数的名称更改为checkbox(因为这是您用作表单中复选框的名称):

public ActionResult PassArray(string[] checkbox) {
    ...    
}

<击>


更新:

或者如果您只想发送复选框的值而不是任何其他表单输入元素,则可能需要使用traditional模式:

$('#click_post').click(function () {
    var list = new Array();
    $('#container input[type="checkbox"]').each(function () {
        list.push($(this).val());
    });

    var $form = $(this).closest('form');
    $.ajax({
        url: $form.attr('action'),
        type: 'POST',
        traditional: true,
        data: { value: list },
        success: function(result) {
            alert('test');
        }
    });
});

或:

$('#click_post').click(function () {
    var list = new Array();
    $('#container input[type="checkbox"]').each(function () {
        list.push($(this).val());
    });

    var $form = $(this).closest('form');
    $.post($form.attr('action'), $.param({ value: list }, true), function(result) {
        alert('test');
    });
});

然后:

public ActionResult PassArray(string[] value) {
    ...    
}

答案 2 :(得分:0)

var list = new Array(); // This simply looks ugly
var list = []; //This is the best way to so it in js - both are the same though
//everything else seems fine.. now
var data = {value: JSON.stringify(list)}; // -> '[1,2,3]' and so on

你的其余代码很好。虽然我想知道,为什么在循环复选框并构建自己的数据时使用表单?表格中是否有这些复选框?即便如此,它是否仅为您保留帖子链接?