2011-10-04 19 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。 –