林信良(良葛格)的专栏

http://caterpillar.onlyfun.net/

用户操作
[即时聊天] [发私信] [加为好友]
林信良ID:caterpillar_here
225360次访问,排名293好友0人,关注者67
caterpillar_here的文章
原创 49 篇
翻译 0 篇
转载 1 篇
评论 325 篇
良葛格的公告
更多文件请访问
良葛格学习笔记

最近评论
hq_love_love:林老师问您一个问题。我在运行的这第一个例子加载下拉列表的值的时候会有一个alert(list);可以弹出后台String[]所返回的值。而在用DWRUtil.addOptions("op",list);时确报了个错,错误如下
[Object error]...
wangliang_hust2:不错!
wangliang_hust2:顶!!!
jbaowei2000:找不到JSONObject ,报异常
jbaowei2000:JSONObject 是什么?没看明白
文章分类
收藏
    相册
    Java
    夏昕的专栏
    良葛格学习笔记
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 JSON傳送與接收收藏

    新一篇: Ajax 輸入驗證 | 旧一篇: XML傳送與接收

    JSON 中我們已經介紹過其基本格式,與XML相同,JSON只是一個文字格式,只要客戶端與伺服端可以剖析它,就可以利用它作為傳送資料的格式,但它是JavaScript的核心特性之一,所以在JavaScript中使用JSON作為資料格式很方便,您還可以在 http://www.json.org 找到處理JSON的程式庫,包括客戶端JavaScript library與伺服端的library。

    相較於XML,JSON在資料表示時更為簡潔,例如一個表示帳戶的資料,XML中可能如下表示:
    <account>
        <number>123456</number>
        <name>Justin</name>
        <balance>1000</balance>
    </account>

    而使用JSON可以這麼表示:
    var account = {
        number : "123456",
        name: "Justin",
        balance: "1000"
    };

    您可以下載 http://www.json.org/json.js ,並將之加入至網頁之中:
    <script type="text/javascript" src="json.js"></script>

    json.js 中有JSON parser與JSON stringifier,例如它擴充了物件,增加了toJSONString()函式,您可以直接如下傳回物件的JSON表示法:
    function Account(number, name, balance) {
        this.number = number;
        this.name = name;
        this.balance = balance;
    }

    var account = new Account(123456, "Justin", 1000);
    alert(account.toJSONString());

    您可以按下 執行範例 觀看結果。

    您可以把JSON表示法以POST發送至伺服端,例如:
    • HandleJSONEx-2.js
    var xmlHttp;

    function createXMLHttpRequest() {
    if(window.XMLHttpRequest) {
    xmlHttp = new XMLHttpRequest();
    }
    else if(window.ActiveXObject) {
    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    }

    function prepareJSON() {
    var number = document.getElementById("num").value;
    var name = document.getElementById("name").value;
    var balance = document.getElementById("bal").value;

    var account = new Object();
    account.number = number;
    account.name = name;
    account.balance = balance;

    return account.toJSONString();
    }

    function handleAccount() {
    var json = prepareJSON();
    var url = "JSONServlet?timeStamp" + new Date().getTime();
    createXMLHttpRequest();
    xmlHttp.onreadystatechange = handleStateChange;
    xmlHttp.open("POST", url);
    xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xmlHttp.send(json);
    }

    function handleStateChange() {
    if(xmlHttp.readyState == 4) {
    if(xmlHttp.status == 200) {
    document.getElementById("response").innerHTML = xmlHttp.responseText;
    }
    }
    }

    這個程式使用者輸入的帳號資訊包裝為物件,並使用JSON擴充的toJSONString()將之轉換為JSON格式,之後POST至伺服端,伺服端可以至  JSON in Java 下載JSON伺服端的Parser,您可以撰寫以下的程式:
    • JSONServlet.java
    package onlyfun.caterpillar;

    import java.io.*;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.json.*;

    public class JSONServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
    public JSONServlet() {
    super();
    }

    protected void doPost(HttpServletRequest request,
    HttpServletResponse response) throws ServletException, IOException {
    String json = readJSONString(request);

    JSONObject jsonObject = null;
    String responseText = null;
    try {
    jsonObject = new JSONObject(json);
    responseText = "帳號 " + jsonObject.getString("number") + "<br/> 名稱 "
    + jsonObject.getString("name") + "<br/> 餘額 " + jsonObject.getString("balance");
    }
    catch (JSONException e) {
    e.printStackTrace();
    }


    response.setCharacterEncoding("UTF-8");
    response.setContentType("text/xml");
    response.getWriter().print(responseText);
    }

    private String readJSONString(HttpServletRequest request){
    StringBuffer json = new StringBuffer();
    String line = null;
    try {
    BufferedReader reader = request.getReader();
    while((line = reader.readLine()) != null) {
    json.append(line);
    }
    }
    catch(Exception e) {
    System.out.println(e.toString());
    }
    return json.toString();
    }
    }

    這個Servlet剖析JSON,並將資料取出後再傳回文字回應。

    如果將JSON字串傳回給客戶端瀏覽器,則可以使用eval()將之運算為一個JavaScript物件以進行操作。 

    发表于 @ 2007年03月09日 13:32:00|评论(loading...)|编辑

    新一篇: Ajax 輸入驗證 | 旧一篇: XML傳送與接收

    评论

    #manovo 发表于2007-03-12 09:55:18  IP:
    谢谢,你的文章通俗易懂,很实用.
    #westsince2001 发表于2007-09-14 14:27:36  IP: 222.66.51.*
    路过,多谢指教
    #westsince2001 发表于2007-09-14 14:40:56  IP: 222.66.51.*
    对了,读取line的时候没转码哦。要不中文就是乱码俄
    #jbaowei2000 发表于2008-09-23 17:00:27  IP: 203.86.84.*
    JSONObject 是什么?没看明白
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © 良葛格