Как разместить сложную форму HTML как JSON?

У меня очень сложная форма на веб-странице. Пользователь фактически создает сложный объект. Пользовательский интерфейс обрабатывается с помощью jQuery (показывая, скрывая разделы, дублируя и удаляя подформы,...).

Просто размещение формы при представлении пользователя, хотя и возможно, не кажется лучшим решением: было бы сложно составить уникальные имена для полей (могут быть массивы объектов) и декодировать весь материал на стороне сервера.

Я предполагаю, что лучше разместить JSON-представление объекта. Как мне это сделать?

Я не пытаюсь сделать ajax-вызов. Я хочу отправить форму, но используя JSON вместо обычной формы приложения /x -www-form-urlencoded.

FWIW, бэкэнд - это ASP.NET MVC.

ТИА,

Ответы

Ответ 1

Сериализовать JSON с помощью script...

Хотя этот ответ использует Ajax, вместо этого вы можете написать сериализованную строку на вход [type = hidden] в вашей форме

Сериализация JSON в jQuery

Ответ 2

Вы можете попробовать следующее:

$("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/

Ответ 3

Если вы используете jquery, вы можете изучить эти две функции .serialize() и .serializeArray()

Эти функции помогут вам получить данные формы, без необходимости ручного ввода.

Ответ 4

Используйте плагин формы jquery, чтобы отправить форму через AJAX. Для повторяющихся имен полей путь по умолчанию обычно добавляет [] к имени - большинство серверных языков, а затем создает массив, содержащий все представленные значения. В зависимости от языка это также может произойти без [], но я уверен, что MSDN поможет вам с тех пор, как вы используете ASP.NET для своего бэкэнд.