使用post方法實現(xiàn)json往返傳輸數(shù)據(jù)的方法
問題所在:
當我們想讓應(yīng)用層和http之間的所有接口都采用json,這樣,客戶端代碼就可以純碎用javascript的對象來編寫,服務(wù)器打啊也可以純粹的用Java的對象來編寫。
我們使用的是post請求的方法,有些不同于get的方法!
客戶端html代碼:
<html>
<head>
<title>Hello Ajax version 5a</title>
<style type='text/css'>
* { font-family: Tahoma, Arial, sans-serif; }
#helloTitle{ color: #48f; }
.sidebar{
background-color: #adf;
color: navy;
border: solid blue 1px;
width: 180px;
height: 200px;
padding: 2px;
margin: 3px;
float: left;
}
</style>
<script type='text/javascript' src='prototype.js'></script>
<script type='text/javascript' src='json.js'></script>
<script type='text/javascript'>
window.onload=function(){
$('helloBtn').onclick=function(){
var name=$('helloTxt').value;
new Ajax.Request(
"hello5a.jsp",
{
postBody:JSON.stringify({name:name}),
onComplete:function(xhr){
var responseObj=JSON.parse(xhr.responseText);
update(responseObj);
}
}
);
}
}
function update(obj){
$('helloTitle').innerHTML="<h1>Hello, <b><i>"+obj.name+"</i></b></h1>";
var likesHTML='<h5>'+obj.initial+' likes...</h5><hr/>';
for (var i=0;i<obj.likes.length;i++){
likesHTML+=obj.likes[i]+"<br/>";
}
$('likesList').innerHTML=likesHTML;
var recipeHTML='<h5>'+obj.initial+'\'s favourite recipe</h5>';
for (key in obj.ingredients){
recipeHTML+=key+" : "+obj.ingredients[key]+"<br/>";
}
$('ingrList').innerHTML=recipeHTML;
}
</script>
</head>
<body>
<div id='likesList' class='sidebar'>
<h5>Likes</h5><hr/>
</div>
<div id='ingrList' class='sidebar'>
<h5>Ingredients</h5><hr/>
</div>
<div>
<div id='helloTitle'>
<h1>Hello, stranger</h1>
</div>
<p>Please introduce yourself by entering your name in the box below</p>
<input type='text' size='24' id='helloTxt'></input> <button id='helloBtn'>Submit</button>
</div>
</body>
</html>
jsp代碼:
<jsp:directive.page contentType="application/javascript" import="java.util.*,net.sf.json.*"/>
<%
//read the request body
String json=request.getReader().readLine(); //讀取post請求主體
JSONObject jsonObj=new JSONObject(json);//解析json字符串
String name=(String)(jsonObj.get("name"));//讀取解析后的對象
jsonObj.put("initial",name.substring(0,1).toUpperCase()); //添加新的值
String[] likes=new String[]{ "JavaScript", "Skiing", "Apple Pie" };
jsonObj.put("likes",likes);
Map ingredients=new HashMap();
ingredients.put("apples","3kg");
ingredients.put("sugar","1kg");
ingredients.put("pastry","2.4kg");
ingredients.put("bestEaten","outdoors");
jsonObj.put("ingredients",ingredients);
%><%=jsonObj%>
<!--以json的形式輸出對象-->
另外我們還要用到包裝集:
prototype.js和json.js
效果如下:

總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
- rapidjson解析json代碼實例以及常見的json core dump問題
- 利用rapidjson實現(xiàn)解析嵌套的json的方法示例
- C++中rapidjson組裝繼續(xù)簡化的方法
- C++中rapidjson將嵌套map轉(zhuǎn)為嵌套json的講解
- C++中rapidjson將map轉(zhuǎn)為json的方法
- C++中rapidjson組裝map和數(shù)組array的代碼示例
- 小程序getLocation需要在app.json中聲明permission字段
- Node.js中package.json中庫的版本號(~和^)
- Go JSON編碼與解碼的實現(xiàn)
- json error: Use of overloaded operator [] is ambiguous錯誤的解決方法
相關(guān)文章
layer插件實現(xiàn)在彈出層中彈出一警告提示并關(guān)閉彈出層的方法
今天小編就為大家分享一篇layer插件實現(xiàn)在彈出層中彈出一警告提示并關(guān)閉彈出層的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09
使用bootstrap莫名其妙出現(xiàn)橫向滾動條的問題及解決
這篇文章主要介紹了使用bootstrap莫名其妙出現(xiàn)橫向滾動條的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11
Electron 打包問題:electron-builder 下載各種依賴出錯(推薦)
這篇文章主要介紹了Electron 打包問題:electron-builder 下載各種依賴出錯,本文給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07
JS動態(tài)添加的div點擊跳轉(zhuǎn)到另一頁面實現(xiàn)代碼
這篇文章主要介紹了JS動態(tài)添加的div點擊跳轉(zhuǎn)到另一頁面實現(xiàn)代碼,需要的朋友可以參考下2017-09-09
JavaScript函數(shù)內(nèi)部屬性和函數(shù)方法實例詳解
函數(shù)是由事件驅(qū)動的或者當它被調(diào)用時執(zhí)行的可重復(fù)使用的代碼塊。通過本文給大家介紹JavaScript函數(shù)內(nèi)部屬性和函數(shù)方法,感興趣的朋友一起學(xué)習吧2016-03-03

