溫暖潔森

          勇敢做自己

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


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


          3、JSON方式

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

          JSON具有以下這些形式:

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

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

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

          字符串(string)是由雙引號(hào)包圍的任意數(shù)量Unicode字符的集合,使用反斜線轉(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)查詢出來的數(shù)據(jù)集合封裝成JSON的方式展現(xiàn)在前臺(tái)

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

           1        <div id="brandId">
           2        <form id="form1">
           3            <p>
           4                預(yù)約掛號(hào)反饋資源管理
           5            </p>
           6            <p>
           7                <label>
           8                    開始日期
           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開源組件,意在規(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表單中查詢數(shù)據(jù)并調(diào)用后臺(tái)方法;reportError()方法是獲得封裝后的JSONArray進(jìn)行遍歷并進(jìn)在
          前臺(tái)進(jìn)行展示


          控制層代碼如下:

           1/**
           2     * 此為ajax測試,把查詢結(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("開放日期:" + 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)用基類方法,轉(zhuǎn)化成json方式
          30        renderJson(response, resultArray.toString());
          31            }

          32
          此代碼是根據(jù)查詢條件查詢出符合條件數(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è)功能完成

          頁面效果如下:



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

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

          評(píng)論

          # re: [原創(chuàng)]實(shí)踐總結(jié)ajax各種使用方式(中) 2008-01-08 16:27 久城
          能否請(qǐng)教一下,你的后臺(tái)處理中,從數(shù)據(jù)庫中取出來的list轉(zhuǎn)化成JSON對(duì)象,這中間用的是某個(gè)lib包?還是自己寫的類用來封裝和轉(zhuǎn)換?
          我從List中取出數(shù)據(jù),想傳回一個(gè)JSON對(duì)象到JavaScript中,不知道現(xiàn)在用什么方法實(shí)現(xià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各種使用方式(中)[未登錄] 2008-01-09 09:08 harry520
          關(guān)于 久城 的提出的問題我想解釋一下
          1、我用json包是jsonrpc包
          2、不需要自己寫類來進(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集合的話就用我上述這個(gè)方法就可以,你重點(diǎn)看一
          下控制層的listFor1方法和上述getJSON方法,然后根據(jù)你的要求把list穿入就可以了

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

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

          主站蜘蛛池模板: 海丰县| 澄迈县| 金阳县| 乐安县| 平原县| 张家口市| 仪征市| 华亭县| 菏泽市| 靖边县| 衡阳县| 江孜县| 霍城县| 龙里县| 仁化县| 毕节市| 枣阳市| 南宁市| 铜梁县| 天峻县| 通江县| 冷水江市| 利辛县| 浮山县| 江油市| 太仆寺旗| 收藏| 蒙城县| 兴文县| 神木县| 遂川县| 湄潭县| 永济市| 莆田市| 宁河县| 邢台县| 永吉县| 肥城市| 芦山县| 眉山市| 湛江市|