2011-10-04 66 views
15

是否可以提交表单数据作为JSON,而不使用AJAX?提交表单为JSON(无AJAX)

我试图改变ENCTYPE:

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

但是,这不是根据on w3schools

我想原因有效值这种行为是请求的URL会返回一个文件,我如果我使用AJAX,显然不能做任何事情。我想发送标记为Content-Type: application/json的JSON数据,以便ASP.NET MVC将使用其JSON绑定。

+0

为什么:

https://github.com/maxatwork/form2js

此外,它可以根据用户的要求。你可以检查它们的许可。你可以找到的javascript使用下面的链接文件的这个基本的例子进行修改你究竟不能对文件做任何事情?您可以随时将内容写入另一个窗口,只要内容类型正确,它将下载该文件。 – Josh

+0

为什么不能使用常规表单POST? – RoccoC5

+2

请参阅此SO问题http://stackoverflow.com/questions/4256556/post-json-without-model-and-ajax – Prasanth

回答

0

你可以试试;

// 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; 

} 
1

是的,你可以序列化的形式像插件的对象。我为你写了一个样本;

//头

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

您可以下载插件从here

//形式

<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 
    } 
}); 

祝你好运!

+0

https://github.com/macek/jquery-serialize-object – shadowbq

1

您可以使用JSON.stringify()来序列化您的客户端对象,然后将其放入隐藏输入并提交表单...然后在控制器端将其从Request.Form中取出并反序列化它到你的对象?

[编辑] 刚刚在原始问题的下面的评论部分看到,这本质上是一个重复的帖子,而且这个stackoverflow作为一个解决方案。

-1

您可以通过AJAX发送请求,然后在控制器中生成一个文件下载URL并通过AJAX响应发回。然后,您可以在另一个窗口中打开该URL。这将是一个完整的基于AJAX的解决方案,因此您可以使用JSON。

+0

OP想要不要使用AJAX! – Grandpa

0

按照W3C标准,你可以使用

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

说明实现这个specification将他们的形式发送JSON数据

用户代理没有经过像JSON数据每当形式的enctype属性设置为application/json。在过渡期间,不支持此编码的用户代理将fall back改为使用application/x-www-form-urlencoded。这可以是服务器端的detected,并且可以使用此specification中描述的conversion algorithm将此类数据转换为JSON

input names中使用的路径格式很简单。首先,当没有结构化信息存在时,信息将被简单地在一个JSON对象

Reference DOC

+0

应用程序/ json enctype已弃用,不建议使用。请参阅:https://www.w3.org/TR/html-json-forms/ – jsears

-1

捕获为keys尝试这个简单的存储在可变的POST数组,然后对其进行编码为JSON OBJ。 是这样的 - >

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

对不起它PHP

0

您现在可以设置表单的enctype = '应用/ JSON' 根据2014年5月

公布29新的W3C标准你可以检查一下:http://www.w3.org/TR/html-json-forms/

+3

我希望有一天这种支持。我刚刚尝试过使用Chrome 45,并将它编码为application/x-www-form-urlencoded,就像完全不使用enctype一样。我无法找到任何记录对此的支持的资源,例如http://caniuse.com。 –