如何将复杂的HTML表单发布为JSON?

时间:2011-03-02 11:13:15

标签: javascript jquery html json post

我在网页中有一个非常复杂的表单。用户实际上构建了一个复杂的对象。使用jQuery处理UI(显示,隐藏部分,复制和删除子表单,......)。

简单地在用户提交时发布表单虽然可能,但似乎不是最好的解决方案:很难为字段组合唯一的名称(可以有对象数组)并在服务器端解码整个内容。

我想我应该发布一个对象的JSON表示。我怎么做?

我不打算进行ajax调用。我想提交表单但是使用JSON而不是通常的application / x-www-form-urlencoded表单。

FWIW,后端是ASP.NET MVC。

TIA,

4 个答案:

答案 0 :(得分:3)

使用脚本序列化为JSON ...

虽然这个答案使用了Ajax,但您可以将序列化字符串写入表单中的输入[type = hidden]

Serializing to JSON in jQuery

答案 1 :(得分:1)

你可以试试这个:

$("form").submit(function()
{
    //Checking data here:
    $("input").each(function(i, obj)
    {
    });
    alert($(this).serialize());
    alert(toJSON($(this).serializeArray()));
    //return false;
});

function toJSON(obj)
{
    var json = '({';
    $.each(obj, function(k,v){
    var q = typeof v == 'string' ? ~v.indexOf("'") ? '"' : "'" : '';
    if (typeof v == 'object')
    v = toJSON(v).slice(0,-1).substr(1);
    json+= k + ':'+ q + v + q + ',';
    });
    return json.slice(0,-1)+'})';
};

我的小提琴:http://jsfiddle.net/Achilleterzo/6Zj6n/

答案 2 :(得分:1)

如果您使用的是jquery,可以查看这两个函数.serialize()和.serializeArray()

这些功能可以帮助您获取表单数据,而无需手动迭代。

答案 3 :(得分:-1)

使用jquery form plugin通过AJAX提交表单。 对于重复的字段名称,默认方式通常是将[]附加到名称 - 大多数服务器端语言然后创建包含所有提交值的数组。根据语言的不同,它可能会在没有[]的情况下发生,但我确信MSDN会帮助您,因为您在后端使用ASP.NET。