<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    溫暖潔森

    勇敢做自己

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      13 隨筆 :: 1 文章 :: 70 評(píng)論 :: 0 Trackbacks


    [原創(chuàng)]實(shí)踐總結(jié)ajax各種使用方式(上)


    3、JSON方式

    JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式,易于人閱讀和編寫(xiě),比xml有更好的易用性json中文網(wǎng)站

    JSON具有以下這些形式:

    對(duì)象是一個(gè)無(wú)序的“‘名稱(chēng)/值’對(duì)”集合。一個(gè)對(duì)象以“{”(左括號(hào))開(kāi)始,“}”(右括號(hào))結(jié)束。每個(gè)“名稱(chēng)”后跟一個(gè)“:”(冒號(hào));“‘名稱(chēng)/值’ 對(duì)”之間使用“,”(逗號(hào))分隔。

    數(shù)組是值(value)的有序集合。一個(gè)數(shù)組以“[”(左中括號(hào))開(kāi)始,“]”(右中括號(hào))結(jié)束。值之間使用“,”(逗號(hào))分隔。

    值(value)可以是雙引號(hào)括起來(lái)的字符串(string)、數(shù)值(number)、truefalsenull、對(duì)象(object)或者數(shù)組(array)。這些結(jié)構(gòu)可以嵌套。

    字符串(string)是由雙引號(hào)包圍的任意數(shù)量Unicode字符的集合,使用反斜線(xiàn)轉(zhuǎn)義。一個(gè)字符(character)即一個(gè)單獨(dú)的字符串(character string)。

    字符串(string)與C或者Java的字符串非常相似。

    數(shù)值(number)也與C或者Java的數(shù)值非常相似。除去未曾使用的八進(jìn)制與十六進(jìn)制格式。除去一些編碼細(xì)節(jié)。



    以下是以自己在項(xiàng)目中實(shí)際使用到JSON為原型進(jìn)行舉例

    1、業(yè)務(wù)描述:

    根據(jù)前臺(tái)搜索信息進(jìn)行搜索,并把后臺(tái)查詢(xún)出來(lái)的數(shù)據(jù)集合封裝成JSON的方式展現(xiàn)在前臺(tái)

    前臺(tái)頁(yè)面搜索:

     1        <div id="brandId">
     2        <form id="form1">
     3            <p>
     4                預(yù)約掛號(hào)反饋資源管理
     5            </p>
     6            <p>
     7                <label>
     8                    開(kāi)始日期
     9                    <input type="text" name="operate_date1" />
    10                </label>
    11                <label>
    12                    結(jié)束日期
    13                    <input type="text" name="operate_date2" />
    14                </label>
    15                <label>
    16                    病人姓名
    17                    <input type="text" name="name1" />
    18                </label>
    19                <label>
    20                    科室
    21                    <input type="text" name="name2" />
    22                </label>
    23                <input type="button" onclick="aa()" value="搜索" />
    24            </p>
    25</form>
    26        </div>
    27        <div id="pp">
    28        </div>

     

    js腳本,在這里用到Prototype開(kāi)源組件,意在規(guī)避ajax底層操作prototype官方網(wǎng)站

     1function aa(){
     2
     3        var url = '${ctx}/registerresult.do?method=listFor1';
     4        var name22=$F("name2");
     5        var myAjax = new Ajax.Request(
     6        url,
     7        {
     8            method: 'post',
     9            parameters:Form.serialize('form1'),
    10            
    11            evalScripts: true,
    12        
    13            onComplete:reportError
    14        }
    );
    15}

    16 function reportError(originalRequest){
    17      var myobj = originalRequest.responseText.evalJSON(true);
    18      var tdate = new Date;
    19      var tmonth =tdate.getMonth()+1;
    20      var tday=tdate.getDate();
    21      if(tmonth<10)
    22         tmonth="0"+tmonth;
    23       if(tday<10)
    24            tday="0"+tday;
    25      var ymdate = tdate.getYear()+""+tmonth+""+tday;
    26      var str="<table>";
    27      str=str+"<tr><td></td><td>確認(rèn)號(hào)</td><td>反饋結(jié)果</td><td>申請(qǐng)單號(hào)</td><td>申請(qǐng)日期</td><td>病人編號(hào)</td><td>病人姓名</td><td>科室名</td></tr>";
    28      myobj.each(function(myobj1){
    29
    30      if(ymdate==myobj1[4]){
    31      str=str+"<tr>";
    32      str = str+"<td><input type='checkbox' name='idd' value="+myobj1[0]+" /></td>";
    33      str = str+"<td style='color:red'>"+myobj1[1]+"</td>";
    34      str = str+"<td style='color:red'>"+myobj1[2]+"</td>";
    35      str = str+"<td style='color:red'>"+myobj1[3]+"</td>";
    36      str = str+"<td style='color:red'>"+myobj1[4]+"</td>";
    37      str = str+"<td style='color:red'>"+myobj1[5]+"</td>";
    38      str = str+"<td style='color:red'>"+myobj1[6]+"</td>";
    39      str = str+"<td style='color:red'>"+myobj1[7]+"</td>";
    40      str=str+"</tr>";
    41
    42    }
    else{
    43      str=str+"<tr>";
    44      str = str+"<td><input type='checkbox' name='idd' value="+myobj1[0]+" /></td>";
    45      str = str+"<td>"+myobj1[1]+"</td>";
    46      str = str+"<td>"+myobj1[2]+"</td>";
    47      str = str+"<td>"+myobj1[3]+"</td>";
    48      str = str+"<td>"+myobj1[4]+"</td>";
    49      str = str+"<td>"+myobj1[5]+"</td>";
    50      str = str+"<td>"+myobj1[6]+"</td>";
    51      str = str+"<td>"+myobj1[7]+"</td>";
    52      str=str+"</tr>";
    53      }

    54      }
    );
    55    str=str+"</table>";
    56    $("pp").innerHTML=str;
    57
    58     }
    此腳本中aa()是獲得前臺(tái)form1表單中查詢(xún)數(shù)據(jù)并調(diào)用后臺(tái)方法;reportError()方法是獲得封裝后的JSONArray進(jìn)行遍歷并進(jìn)在
    前臺(tái)進(jìn)行展示


    控制層代碼如下:

     1/**
     2     * 此為ajax測(cè)試,把查詢(xún)結(jié)果list使用JSON方式返回
     3     *
     4     * @param
     5     *
     6     */

     7    public void listFor1(ActionMapping mapping, ActionForm form,
     8            HttpServletRequest request, HttpServletResponse response)
     9            throws Exception {
    10        String operate_date1 = request.getParameter("operate_date1");
    11
    12        String operate_date2 = request.getParameter("operate_date2");
    13        String name1 = request.getParameter("name1");
    14        String name2 = request.getParameter("name2");
    15        log.info("開(kāi)放日期:" + operate_date1);
    16        List list = registerresultManager.queryApply(registerresultManager
    17                .registerResult(operate_date1, operate_date2, name1, name2),
    18                getListPage(request, Constant.COUNT));
    19
    20        
    21        JSONArray resultArray = new JSONArray();
    22        JSONObject jsonObject = new JSONObject();
    23        for (int i = 0; i < list.size(); i++{
    24            Object[] d = (Object[]) list.get(i);
    25            jsonObject = registerresultManager.getJSON(d);
    26            resultArray.put(jsonObject);
    27        }

    28
    29        // 調(diào)用基類(lèi)方法,轉(zhuǎn)化成json方式
    30        renderJson(response, resultArray.toString());
    31            }

    32
    此代碼是根據(jù)查詢(xún)條件查詢(xún)出符合條件數(shù)據(jù)集合,并把集合轉(zhuǎn)化成JSONObject,并把此對(duì)象放入JSONArray

    轉(zhuǎn)化成JSONObject方法如下:

     1/**
     2     * 轉(zhuǎn)換成JSON格式
     3     * @param domain
     4     *                 是要進(jìn)行轉(zhuǎn)化的實(shí)體對(duì)象
     5     * @return JSONObject
     6     */

     7    public JSONObject getJSON(Object[] domain) {
     8        JSONObject jsonObject = new JSONObject();
     9        for (int i = 0; i < domain.length; i++{
    10            if(domain[i]==null)
    11                domain[i]="";
    12            jsonObject.put(String.valueOf(i), domain[i]);
    13        }

    14
    15        return jsonObject;
    16    }
    這樣整個(gè)功能完成

    頁(yè)面效果如下:



    總結(jié):
    JSON比XML在ajax方面一些優(yōu)勢(shì):
    1、易于解讀,易于編寫(xiě),與java中Map集合類(lèi)似,更易于被開(kāi)發(fā)人員接受
    2、節(jié)省解析過(guò)程,不用象xml需要用JDom等方式解析xml

    一篇不錯(cuò)餓參考文章  使用JSON進(jìn)行數(shù)據(jù)傳輸
    posted on 2008-01-08 11:03 harry520 閱讀(2293) 評(píng)論(4)  編輯  收藏 所屬分類(lèi): J2EE

    評(píng)論

    # re: [原創(chuàng)]實(shí)踐總結(jié)ajax各種使用方式(中) 2008-01-08 16:27 久城
    能否請(qǐng)教一下,你的后臺(tái)處理中,從數(shù)據(jù)庫(kù)中取出來(lái)的list轉(zhuǎn)化成JSON對(duì)象,這中間用的是某個(gè)lib包?還是自己寫(xiě)的類(lèi)用來(lái)封裝和轉(zhuǎn)換?
    我從List中取出數(shù)據(jù),想傳回一個(gè)JSON對(duì)象到JavaScript中,不知道現(xiàn)在用什么方法實(shí)現(xiàn)比較簡(jiǎn)單。  回復(fù)  更多評(píng)論
      

    # re: [原創(chuàng)]實(shí)踐總結(jié)ajax各種使用方式(中) 2008-01-08 22:04 xidudui
    透徹!  回復(fù)  更多評(píng)論
      

    # re: [原創(chuàng)]實(shí)踐總結(jié)ajax各種使用方式(中)[未登錄](méi) 2008-01-09 09:08 harry520
    關(guān)于 久城 的提出的問(wèn)題我想解釋一下
    1、我用json包是jsonrpc包
    2、不需要自己寫(xiě)類(lèi)來(lái)進(jìn)行封裝和轉(zhuǎn)換,如果你想回傳一個(gè)對(duì)象給前臺(tái)就用JSONObject,如果是傳回一個(gè)數(shù)據(jù)集合就封裝成JSONArray
    上篇文章中的getJSON方法就是轉(zhuǎn)換成JSONArray對(duì)象
    /**
    2 * 轉(zhuǎn)換成JSON格式
    3 * @param domain
    4 * 是要進(jìn)行轉(zhuǎn)化的實(shí)體對(duì)象
    5 * @return JSONObject
    6 */
    7 public JSONObject getJSON(Object[] domain) {
    8 JSONObject jsonObject = new JSONObject();
    9 for (int i = 0; i < domain.length; i++) {
    10 if(domain[i]==null)
    11 domain[i]="";
    12 jsonObject.put(String.valueOf(i), domain[i]);
    13 }
    14
    15 return jsonObject;
    16 }
    3、如果你要回傳一個(gè)list集合的話(huà)就用我上述這個(gè)方法就可以,你重點(diǎn)看一
    下控制層的listFor1方法和上述getJSON方法,然后根據(jù)你的要求把list穿入就可以了

    你看一下,如果有問(wèn)題請(qǐng)給我回復(fù)!  回復(fù)  更多評(píng)論
      

    # re: [原創(chuàng)]實(shí)踐總結(jié)ajax各種使用方式(中)[未登錄](méi) 2008-01-10 09:07 久城
    @harry520
    十分感謝!~:)
    這幾天一直想找這樣一個(gè)包!  回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 日批视频网址免费观看| 永久免费bbbbbb视频| 亚洲一区二区观看播放| 亚洲а∨天堂久久精品| 黄色网址免费观看| 一级成人a免费视频| 国产成人精品日本亚洲网址| 亚洲人成网7777777国产| 日本高清免费网站| 福利免费观看午夜体检区| 国产成人精品无码免费看| a级毛片免费网站| 色屁屁在线观看视频免费| 亚洲色大成网站www| 一区二区视频免费观看| 84pao国产成视频免费播放| 99久久国产精品免费一区二区 | 久久亚洲成a人片| 久久久青草青青国产亚洲免观 | 黄页网站在线视频免费| 黄网站免费在线观看| 免费国产成人α片| 成**人免费一级毛片| 免费国产黄线在线观看| 无码专区永久免费AV网站| xvideos亚洲永久网址| 啊灬啊灬别停啊灬用力啊免费看| 成人免费a级毛片| 久久精品国产精品亚洲人人 | 国产av无码专区亚洲av桃花庵| 亚洲中文字幕无码一区二区三区| 伊人久久综在合线亚洲91| 亚洲av片不卡无码久久| 亚洲日本乱码卡2卡3卡新区| 亚洲乱码日产精品一二三| 亚洲色偷偷综合亚洲AV伊人蜜桃 | 香蕉免费一区二区三区| 亚洲一区二区免费视频| 波多野结衣在线免费观看| 久久精品国产亚洲精品| 亚洲真人无码永久在线观看|