由于項(xiàng)目中需要向后臺傳復(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"
}
]
}
下面是我自己的代碼實(shí)現(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)上的一樣,可以提交的時候?yàn)g覽器顯示
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è)的國家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。