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

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

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

    歡迎光臨郝學武的blog。

    JSON實例(AJAX+STRUTS )

    Posted on 2008-06-02 13:11 陜西BOY 閱讀(14778) 評論(9)  編輯  收藏

    前段時間做項目用到了json,今天我抽時間寫了一個struts+ajax+json的例子.
    個人感覺ajax+json在很大程度上降低了網絡和服務器的IO,是一個很不錯的組合!
    1:json的lib我用的是json-lib-2.1-jdk15.jar,它可以在
    2:struts用的是1.2
    3:用到了js第三方prototype.js,主要用它包裝的ajax對象,大家也沒必要用這個,可以直接在js里用XMLHttpRequest。


    以下是例子中所用到的相關文件:
    /////////////////////////////////////// toolhxw.js
    /**
    @hxw  20080602
    */
    //回調函數  簡單回調函數
    function showesay(dataResponse)
    {
     var data = eval('(' + dataResponse.responseText + ')');
     var str='';
     str+='<ul>';
     str+='<li>'+data.param1;+'</li>';
     str+='<li>'+data.param2;+'</li>';
     str+='</ul>';
     document.getElementById("content").innerHTML=str;
    }
    //回調函數  復雜回調函數
    function showcomplex(dataResponse)
    {
     var data = eval('(' + dataResponse.responseText + ')');
     var str='';
     for(var i=0;i<data.js.length;i++)
     {
     str+='<ul>';
     str+='<li>'+data.js[i].id+'</li>';
     str+='<li>'+data.js[i].age+'</li>';
     str+='<li>'+data.js[i].name+'</li>';
     str+='<li>'+data.js[i].address+'</li>';
     str+='</ul>';
     }
     document.getElementById("content").innerHTML=str;
    }
    //獲取簡單的json數據
    function getesay(){
     var url = 'test.do';
      var pars = 'method=getEasy';
      var ajax = new Ajax.Request(
       url,
       {method:'post',parameters:pars,onComplete:showesay}
      );  
    }
    //獲取對象級復雜數據
    function getcomplex(){
     var url = 'test.do';
      var pars = 'method=getComplex';
      var ajax = new Ajax.Request(
       url,
       {method:'post',parameters:pars,onComplete:showcomplex}
      );  
    }

    ///////////////////////////////////////struts-config.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

    <struts-config>
      <data-sources />
      <form-beans />
      <global-exceptions />
      <global-forwards />
      <action-mappings >
        <action path="/test" parameter="method" type="com.json.struts.action.TestAction">
       </action>
       
      </action-mappings>

      <message-resources parameter="com.json.struts.ApplicationResources" />
    </struts-config>

     ////////////////////////////////TestAction.java

    /*
     * Generated by MyEclipse Struts
     * Template path: templates/java/JavaClass.vtl
     */
    package com.json.struts.action;

    import java.io.PrintWriter;

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
    import org.apache.struts.actions.DispatchAction;
    import net.sf.json.*;

    /**
     * @author hxw
     *
     */
    public class TestAction extends DispatchAction {
     

     /**
      * 獲取簡單組合數據
      */
     public ActionForward getEasy(ActionMapping mapping, ActionForm form,
       HttpServletRequest request, HttpServletResponse response) {
      response.setContentType("text/html; charset=GBK");
      try
      {
       PrintWriter out = response.getWriter();
       //這里的數據拼裝一般是從數據庫查詢來的
       JSONObject jsonObject = new JSONObject();
          jsonObject.put("param1", "變量一");
          jsonObject.put("param2", "變量二");
       out.print(jsonObject.toString());
       out.flush();
       out.close();
       return null;
      }catch(Exception e)
      {
       e.printStackTrace();
       return null;
      }
      }
     /**
      * 獲取復雜組合數據
      */
     public ActionForward getComplex(ActionMapping mapping, ActionForm form,
       HttpServletRequest request, HttpServletResponse response) {
      response.setContentType("text/html; charset=GBK");
      try
      {
       PrintWriter out = response.getWriter();
       JSONObject obj = new JSONObject();
       JSONArray js = new JSONArray();
       //這里的數據拼裝一般是從數據庫查詢來的
        for(int i=0;i<3;i++)
        {
         JSONObject objtemp = new JSONObject();
         objtemp.put("id", i);
         objtemp.put("age", "23");
         objtemp.put("name", "test"+i);
         objtemp.put("address", "test");
         js.add(objtemp);
        }
       obj.put("js",js);
             out.print(obj.toString());
      }catch(Exception e)
      {
       e.printStackTrace();
       System.out.print("消費明細json存儲異常");
      }
      return null;
     }
    }

    ////////////////////////////test.jsp
    <%@ page language="java" import="java.util.*" contentType="text/html;charset=gbk"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>json練習</title>
       
     <meta http-equiv="pragma" content="no-cache">
     <meta http-equiv="cache-control" content="no-cache">
     <meta http-equiv="expires" content="0">   
     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
     <meta http-equiv="description" content="This is my page">
     <script type="text/javascript"  src="js/prototype.js"></script>
        <script type="text/javascript"  src="js/toolhxw.js"></script>
        </head>
     
      <body>
      <div id="func" >
      <a href='javascript:getesay()'>獲取簡單組合數據</a>
      <a href='javascript:getcomplex()'>獲取復雜組合數據</a>
      </div>
        <div id="content">
        正在獲取內容...
        </div>
      </body>
    </html>
    大家將這幾個文件拷貝到你的myeclipse的web項目中,發布運行即可。

    Feedback

    # re: JSON例子(struts+ajax+json)  回復  更多評論   

    2008-06-02 17:00 by 隔葉黃鶯
    請教個簡單的問題,當 Java 給 JS 生成的字符串中含有單引號或雙引號是如何處理的。

    比如:out.println("var str='"+name+"'");

    name 可能包含單引號也可能包含雙引號,這個要交給 js 的輸出一般如何寫的,單引號或雙引號怎么轉義更簡潔些。

    # re: JSON例子(struts+ajax+json)[未登錄]  回復  更多評論   

    2008-06-03 09:12 by 陜西boy
    json里面的數據全是鍵-值對,它和java有對應的數據類型。比如String,你在數據填裝的時候全是按照java的規則,json只不過做為一種包裝容器,暫時把你填裝的東西放進來,比如:
    JSONObject jsonObject = new JSONObject();
    jsonObject.put("param1", "\'變量一\"");
    jsonObject.put("param2", "變量二");
    out.print(jsonObject.toString());
    你可以看一下運行結果,和java中的輸出是一模一樣的,也就是說對于逗號等操作完全由你的業務類負責,滿足java語法。

    # re: JSON實例(AJAX+STRUTS )  回復  更多評論   

    2008-06-27 15:38 by young.jiandong
    我現在碰到個問題,照你的代碼改寫我的程序時,如果中文信息是雙數的話,正常,單數時,最后一個字就花了。

    # re: JSON實例(AJAX+STRUTS )  回復  更多評論   

    2008-06-30 16:12 by 陜西BOY
    不會哪樣的,我剛做了一個奇數和偶數漢字的例子,完全正常,你再看看你是否是其他設置而引起了這個問題~~~~~

    # re: JSON實例(AJAX+STRUTS )  回復  更多評論   

    2008-07-01 17:20 by young.jiandong
    我的環境:tomcat5.5.23,struts1.2(采用了expresso5.5),jdk1.5,采用GBK過濾器。
    頁面:
    var p = $('theId').value;
    var pas = "theId=" + p;
    new Ajax.Request('<html:rewrite page="/util/namelookup.do?state=NameLookup"/>', {
    parameters: pas,
    method:'post',
    //encoding: 'GBK',
    onComplete: function(dataResponse){
    var data = eval('(' + dataResponse.responseText + ')');
    alert(data.fullName);
    $('fullName').value = data.fullName;
    }
    });

    程序處理部分:
    String theId = request.getParameter("theId");
    ServletControllerRequest sr = (ServletControllerRequest) request;
    HttpServletResponse hres = (HttpServletResponse) sr.getServletResponse();
    hres.setContentType("text/html;charset=GBK");
    try{
    String ss = new String(theId.getBytes("GBK"),"UTF-8");
    //到了這步,如果中文信息為單數時,最后一個漢字就花了。
    PrintWriter out = hres.getWriter();
    JSONObject json = new com.jsite.json.JSONObject();
    json.put("fullName", "Input : "+ss);
    out.print(json.toString());
    out.flush();
    out.close();
    }catch(Exception e){
    e.printStackTrace();
    }

    # re: JSON實例(AJAX+STRUTS )  回復  更多評論   

    2008-07-01 17:23 by young.jiandong
    不好意思,我沒講明白,我的意思是通過ajax得到提交信息時才會出現這個情況。

    # re: JSON實例(AJAX+STRUTS )  回復  更多評論   

    2008-07-01 17:45 by young.jiandong
    參考 http://blog.csdn.net/zhangyunbo1116/archive/2007/04/29/1589684.aspx ,已解決。
    謝謝。

    # re: JSON實例(AJAX+STRUTS )[未登錄]  回復  更多評論   

    2008-07-21 22:55 by 陜西BOY
    哦,最近忙,沒時間上blog,解決了就好。

    # re: JSON實例(AJAX+STRUTS )[未登錄]  回復  更多評論   

    2009-03-31 15:41 by dada
    不知道為什么按這么操作在頁面上點了連接他跳不到action里面去

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    posts - 17, comments - 65, trackbacks - 0, articles - 28

    Copyright © 陜西BOY

    主站蜘蛛池模板: 成人黄18免费视频| 亚洲乱码中文论理电影| 国产又大又粗又硬又长免费| 国产黄色片在线免费观看| 亚洲男人av香蕉爽爽爽爽| 国产偷国产偷亚洲高清日韩 | 国内外成人免费视频| 亚洲国产精品尤物yw在线| 亚洲中文字幕无码久久精品1| 亚洲一卡2卡三卡4卡有限公司| 国产精品久久亚洲不卡动漫| 七次郎成人免费线路视频| 久久一本岛在免费线观看2020| 国产精彩免费视频| 亚洲国产综合无码一区二区二三区| 国产亚洲综合久久| 日本h在线精品免费观看| 亚洲精品在线视频| 不卡视频免费在线观看| 18禁美女黄网站色大片免费观看| 四虎亚洲国产成人久久精品| 亚洲精品美女视频| 天堂在线免费观看| 免费国产成人午夜电影| 亚洲av无码片在线观看| 永久免费视频网站在线观看| 亚洲一区精彩视频| 亚洲成人影院在线观看| 搡女人免费免费视频观看| 久久久无码精品亚洲日韩京东传媒| 精品亚洲福利一区二区| 免费观看无遮挡www的视频| 亚洲国产精品免费观看 | 91麻豆最新在线人成免费观看| 亚洲午夜无码久久| 麻花传媒剧在线mv免费观看| 亚洲风情亚Aⅴ在线发布| 女性自慰aⅴ片高清免费| 久久久WWW成人免费精品| 久久久久亚洲?V成人无码| 日韩精品无码一区二区三区免费 |