Отправить форму как JSON (нет AJAX)

Можно ли представить данные формы как JSON без использования AJAX?

Я попытался изменить enctype:

<form enctype="application/json"></form>

Но это не допустимое значение в соответствии с в w3schools

Причина, по которой мне хотелось бы этого поведения, в том, что запрошенный URL-адрес вернет файл, который я, очевидно, ничего не могу сделать, если я использую AJAX. Я хотел бы отправить данные JSON, помеченные как Content-Type: application/json, чтобы ASP.NET MVC использовал свою привязку JSON.

Ответы

Ответ 1

Да, вы можете сериализовать форму как объект с плагином. Я пишу вам образец,

//Глава

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="jquery.serialize-object.js"></script>

Вы можете скачать плагин из здесь

//Форма

<form id="frm">
<input type="text" name="Model[Firstname]">
<input type="text" name="Model[Lastname]">
<input type="text" name="ModelDetail[PhoneNumber]">
...
<button type="button" onclick="sendForm()">Send</button>
</form>

//JS

function sendForm(){
model_data = $("#frm").serializeObject();
$.ajax({
url: 'YOUR_SERVICE_URL',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify(model_data),
dataType: 'json',
success:function(e){
    // I know, you do not want Ajax, if you callback to page, you can refresh page here
   }
});

Удачи!

Ответ 2

Не могли бы вы использовать JSON.stringify() для сериализации вашего объекта на стороне клиента, а затем использовать его для скрытого ввода и отправить свою форму... а затем в сторону контроллера вытащите его из Request.Form и десериализуйте его в ваш объект?

[Изменить] Просто увидели в разделе комментариев под оригинальным вопросом, что это было по существу дублирующее сообщение и что это fooobar.com/questions/344814/... работало как решение.

Ответ 3

вы можете попробовать:

//html

<form type="POST" action="/Home/Test">
<input id="foo" value="hede">
</form>

//dto

public class TestInDto{
 public string foo {get;set;}
}

//домашний контроллер

[HttpPost]
void Test(TestInDto inDto){
 var foo = inDto.foo;

}

Ответ 4

В соответствии со стандартами W3C вы не можете передавать данные, подобные JSON, используя

<form enctype="application/json"></form>

Описание

Пользовательские агенты, которые реализуют этот specification, будут передавать данные JSON из своих форм всякий раз, когда для атрибута формы enctype установлено значение application/json. В течение переходного периода пользовательские агенты, которые не поддерживают эту кодировку, будут fall back использовать application/x-www-form-urlencoded. Это может быть detected на стороне сервера, а conversion algorithm, описанный в этом specification, может использоваться для преобразования таких данных в JSON.

Формат пути, используемый в input names, прост. Для начала, когда информация о структурировании отсутствует, информация будет просто записана как keys в объекте JSON

Ссылка DOC

Ответ 5

Теперь вы можете установить форму enctype = 'application/json' в соответствии с новыми стандартами W3C, опубликованными 29 мая 2014 года.

Вы можете проверить это: http://www.w3.org/TR/html-json-forms/

Ответ 6

Вы можете использовать Form2js.It разработан Google, и его легко использовать в библиотеке.

https://github.com/maxatwork/form2js

Кроме того, он может быть изменен в соответствии с требованиями пользователя. Вы можете проверить свою лицензию. Вы можете найти основные примеры этого javascript файла, используя следующую ссылку:

http://form2js.googlecode.com/hg/example/test.html

Ответ 7

Вы можете отправить запрос AJAX, а затем сгенерировать URL-адрес загрузки файла в контроллер и отправить его обратно в ответ AJAX. Затем вы можете просто открыть этот URL в другом окне. Это будет полное решение на основе AJAX, поэтому вы можете использовать JSON.

Ответ 8

Попробуйте этот простой массив вашего массива POST в переменной, а затем закодируйте его как json obj. вроде этого →

$postarray = ($ _ POST);
$ Jsondata = json_encode ($ postarray);

Извините за PHP