массив для отправки с постом jquery - PullRequest
0 голосов
/ 15 февраля 2012

Я пытаюсь отправить массив в мой метод с $.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 голосов
/ 15 февраля 2012

$ ('# click_post'). Click (function () {var $ form = $ (this) .closest ('form'); $ .post ($ form.attr ('action'),$ form.serialize (), function (data) {alert ('test');});});

, а также измените имя параметра действия на 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) {
    ...    
}
0 голосов
/ 15 февраля 2012
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

Остальная часть вашего кода в порядке.Хотя мне интересно, зачем использовать форму, когда вы перебираете флажки и все равно создаете свои собственные данные?Эти флажки в форме?Несмотря на это, он просто держит ссылку на сообщение для вас?

0 голосов
/ 15 февраля 2012

serialize или serializeArray должны применяться к объекту jQuery, а не к простому массиву, например:

var serialized_data = $form.serialize();

Данные, передаваемые на $.post, должны быть:

data Карта или строка, отправленная на сервер с запросом.

Таким образом, вы должны изменить PassArray аргумент метода.


Вы также можете сериализовать данные вне формы:
var serialized_data = $('#container input:checkbox').serialize();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...