Отправить форму как 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