1

HTML 表单分为多个部分。部分有它们的输入字段。就在我以 JSON 格式发送表单数据时,如下面的代码所示。控制器接收表单数据作为一维数组。
有没有办法将表单数据作为二维数组发送?其中 section-name 将具有字段名称/值对的数组。

$('form').submit(function () {
                    alert('here');
                    $.ajax({
                        url: $(this).attr('action'),
                        type: 'POST',
                        data: JSON.stringify($(this).serializeArray()),
                        contentType: 'application/json',
                        success: function (data) {
                            alert('data')
                        },
                        error: function (jqXHR, textStatus, errorThrown) {
                            alert('An error has occured!! :-(')
                        }
                    });

                    return false;
                })
            });
4

1 回答 1

1

有,但你不能用.serializeArray(); 您需要使用 jQuery 遍历 DOM 以将您的数据组装成您想要的格式的数组,然后将其作为data参数的值传递给.ajax(). 考虑以下人为设计的示例:

<form>

  <div class="section">
    <span class="section_title">Section 1</span>
    <input name="this" type="text" value="this" />
    <input name="that" type="text" value="is" />
  </div>

  <div class="section">
    <span class="section_title">Section 2</span>
    <input name="these" type="text" value="rather" />
    <input name="those" type="text" value="contrived" />
  </div>

</form>

您可以使用以下 Javascript 代码进行操作:

var formdata = {};
$('form').find('div.section')
    .each(function(i, el) {
        var sectionTitle = $(el)
            .find('span.section_title')
            .text();
        $(el).find('input')
            .each(function(i, el) {
                var name  = $(el).attr('name');
                var value = $(el).val();
                formdata[sectionTitle][name] = [value];
            });
    });

结果, in formdata,将是:

{'Section 1': {'this': 'this',
               'that': 'is'},
 'Section 2': {'these': 'rather',
               'those': 'contrived'}}

当然它不是为你的情况量身定做的,但它应该足够接近让你明白;如果没有,请随时发表评论要求澄清,我会尽力提供。(顺便说一句,在您的问题中显示您正在使用的表单的 HTML 示例将使提供更适合您的情况的解决方案成为可能。)

于 2013-07-24T14:26:16.063 回答