由于項目中需要向后臺傳復(fù)雜的json數(shù)據(jù)處理完然后跳轉(zhuǎn),大家的做法是用ajax提交數(shù)據(jù)然后在用location.href跳轉(zhuǎn),但是這樣做需要寫兩個controller,正好今天百度看了可以設(shè)置form的enctype屬性為'application/json'就可以發(fā)送json數(shù)據(jù),下面是網(wǎng)上的事例:
<form enctype='application/json'>
<input name='pet[0][species]' value='Dahut'>
<input name='pet[0][name]' value='Hypatia'>
<input name='pet[1][species]' value='Felis Stultus'>
<input name='pet[1][name]' value='Billie'>
</form>
// 生成的Json數(shù)據(jù)是
{
"pet": [
{
"species": "Dahut"
, "name": "Hypatia"
}
, {
"species": "Felis Stultus"
, "name": "Billie"
}
]
}
下面是我自己的代碼實現(xiàn)將json轉(zhuǎn)換為隱藏表單form表單提交:
function postForm(url, params) {
//使用遞歸遍歷
function iter(inputName, obj, resMap) {
for (key in obj) {
if (obj[key] && typeof obj[key] === 'object') {
if (inputName) {
iter(inputName + "[" + key + "]", obj[key], resMap);
} else {
iter(key, obj[key], resMap);
}
} else {
resMap[inputName + "[" + key + "]"] = obj[key];
}
}
}
var temp = document.createElement("form");
temp.action = url;
temp.method = "post";
temp.style.display = "none";
temp.enctype = "application/json";
var resList = {};
iter('',params,resList);//遍歷數(shù)據(jù)結(jié)構(gòu)
for (key in resList) {
var hideInput = document.createElement("input");
hideInput.type = "hidden";
hideInput.name = key;
hideInput.value = resList[key];
temp.appendChild(hideInput);
}
document.body.appendChild(temp);
temp.submit();
}
測試數(shù)據(jù)
var dd = {
user:{
name:'小明',
id:34
},
project:[{
yuwen:{name:'語文',scre:444}},{shuxue:{name:'數(shù)學(xué)',scre:33}}
]
};
postForm('test',dd)
//生成的表單
<form action="testForm" method="post" enctype="application/json" style="display: none;">
<input type="hidden" name="user[name]" value="小明">
<input type="hidden" name="user[id]" value="34">
<input type="hidden" name="kemu[0][yuwen][name]" value="語文">
<input type="hidden" name="kemu[0][yuwen][scre]" value="444">
<input type="hidden" name="kemu[1][shuxue][name]" value="數(shù)學(xué)">
<input type="hidden" name="kemu[1][shuxue][scre]" value="33">
</form>
生成的數(shù)據(jù)跟網(wǎng)上的一樣,可以提交的時候瀏覽器顯示
Content-Type:application/x-www-form-urlencoded,并且后臺也沒有取到理想的json數(shù)據(jù)
這是后臺數(shù)據(jù)
有哪位大神知道怎么解決嗎?求教
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團,成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達內(nèi)教育集團成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負責(zé)iOS教學(xué)及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。