1. 程式人生 > >十八 JQuery&Ajax&Json&Xstream

十八 JQuery&Ajax&Json&Xstream

是什麽 轉成xml patch child username ext 下拉框 文本 encoding

JQuery

1 是什麽?有什麽用?

  • JavaScript的代碼類庫
  • 簡化代碼,提高效率。write less do more

1 JQuery與Servlet數據交互,load方式(少用)

語法:$("#元素id").load(url地址,callback); callback:回調的函數

    function load() {
        $("#text01").load("/8AjaxAndJquery/DemoServlet02",
                function(responseTxt, statusTxt, xhr) {
                    alert(
"結果:" + responseTxt); //拿到id為text01的標簽,將其value設置為服務器傳過來的responseTxt $("#text01").val(responseTxt); } ); }

2 JQuery與Servlet數據交互, Get方式

語法:$.get(URL,callback);

   function get() {
     //function(接收的數據,狀態碼)
     $.get("/8AjaxAndJquery/DemoServlet02" , function
(data,status){ //給div添加內容,可以使用.html或者.text $("#div01").html(data);//可添加<font> // $("#div01").text("da:"+data); }); }

3 JQuery與Servlet數據交互,Post方式

語法:$.post(URL,data,callback);

<script type="text/javascript">
     function post() {
        //$.post(url,頁面向Servlet發送的數json格式的數據,function(接收的數據,狀態碼) 
$.post("/8AjaxAndJquery/DemoServlet02",{name:"zhangsan" , age:18},function(data,status){ alert("頁面接收的數據:"+data); $("#div01").html(data); }); }; </script>

4 JQuery實現用戶名校驗 

<script type="text/javascript">    
    function checkUserName() {
        //獲取輸入框的內容
        var name = $("#name").val();
        //發送請求,$.post(URL,JSON,function(接收的數據,狀態碼))
        $.post("/8AjaxAndJquery/CheckUserNameServlet" ,{name:name}, function(data,status){
            if(data == 1){
                $("#span01").html("<font color=‘red‘>對不起!用戶名已存在</font>");
            }else{
                $("#span01").html("<font color=‘red‘>恭喜!用戶名可用</font>");
            }
        });        
    }
</script>

5 JQuery實現百度下拉框功能

1 前端JQ代碼:鍵盤彈起事件keyup

//1捕捉鍵盤彈起事件
//在文檔準備就緒的時候,對某一個元素進行onkeyup監聽
//$(document).ready(function(){});
$(function() {
    $("#word").keyup(function() {
        //2獲取輸入框的值
        var word = $(this).val();
        if (word == "") {
            $("#div01").hide();
        } else {

            //3請求數據
            $.post("/8BDSearch/FindWordsServlet", {
                word : word
            }, function(data, status) {
                $("#div01").show();
                $("#div01").html(data);
            });
        }
    })
});

2 Servlet,交互查詢關鍵字,將下拉框內容用jsp頁面轉發出去

rotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=UTF-8");
      // 1 獲取參數
        String word = request.getParameter("word");
      // 2 dao查詢
        WordDao dao = new WordDaoImpl();
        List<WordsBean> list  =  dao.findWords(word);
      // 3  返回數據
//        response.getWriter().write("數據是:"+word);
        request.setAttribute("list", list);
        //將list.jsp裏面的內容返回給頁面
        request.getRequestDispatcher("list.jsp").forward(request, response);
    }

3 list.jsp,下拉框內容
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c" %>
<body>
   <table style="width: 600px ; height: 200px">
   <c:forEach items="${list }" var="wordsBean" >
   <tr>
    <td>${wordsBean.words }</td>
    </tr>
   </c:forEach>
   </table>
</body>

6 JQuery實現省市聯動,XML方式:

1 Servlet: 拿到客戶端的pid,調用業務層獲得城市list , 將其封裝成xml對象發送給客戶端

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      try {
          request.setCharacterEncoding("utf-8");
          //1 獲取參數
          int pid = Integer.parseInt(request.getParameter("pid"));
          //2 找出所有城市
          CityDao dao = new CityDaoImpl();
          List<CityBean> list = dao.findCity(pid);
          
          //3 返回數據--->使用XStream將對象轉成xml,傳輸數據:xml或者JSON
          XStream xStream = new XStream();
          //想把id做成屬性
//          xStream.useAttributeFor(CityBean.class, "id");     
          //設置別名
          xStream.alias("city", CityBean.class);
          //轉換一個對象成xml字符串
          String xml =  xStream.toXML(list);
//          System.out.println(xml);
          //代表返回的是文本類型的xml數據
          
          response.setContentType("text/xml;charset=UTF-8");
          response.getWriter().write(xml);
    }

2 前段JSP,頁面整體骨架:

<script type="text/javascript" src="js/jquery-1.11.3.min.js" ></script>
<script type="text/javascript" src="js/city.js" charset="utf-8"></script>
<body>
省份:
<select name="province" id="province">
    <option value="">-請選擇-
    <option value="1">廣東
    <option value="2">湖南
    <option value="3">四川
</select>
城市:
<select name="city" id="city">
    <option value="">-請選擇-
</select>
</body>

3 JS,實現省市聯動功能
$(function(){ 
    // 1 找到省份元素
    $("#province").change(function(){
        //2  一旦裏面的值發生改變,發送請求
        var pid = $(this).val();
        /*<list>
          <city>
            <id>1</id>
            <cname>深圳</cname>
            <pid>1</pid>
          </city>
        </list>
        */
        $.post("/8BDSearch/CityServlet",{pid:pid},function(data,status){
            //先清空以前的值:
            $("#city").html("<option value=‘‘>--請選擇")
            //遍歷:find方法獲得當前每個元素的後代,each方法進行叠代,從data數據裏面拿到所有的city,遍歷一次city執行一次function方法
            $(data).find("city").each(function(){
                //this代表當前的city,取出他們的孩子,id,cname
                var id = $(this).children("id").text();
                var cname = $(this).children("cname").text();
                //給city元素賦值
                $("#city").append("<option value=‘"+id+"‘>"+cname)
            });
        });
    });
});

7 JQuery實現省市聯動,JSON方式:

JSON和xml比較:

  • xml:臃腫
  • json:閱讀性更好、容量更小(推薦使用)

常用對象:

  • JSONArray --->變成數組,集合[]
  • JSONObject --->變成簡單的數據 {name:zhangsan , age:18}

1 Servlet: 拿到客戶端的pid,調用業務層獲得城市list , 將其封裝成JSON對象發送給客戶端

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      try {
          request.setCharacterEncoding("utf-8");
          response.setContentType("text/html;charset=UTF-8");
          //1 獲取參數
          int pid = Integer.parseInt(request.getParameter("pid"));
          //2 找出所有城市
          CityDao dao = new CityDaoImpl();
          List<CityBean> list = dao.findCity(pid);
          
          //3 把list集合轉JSON數據
//          JSONArray  --->變成數組,集合[]
//          JSONObject --->變成簡單的數據    {name:zhangsan , age:18}
          JSONArray jsonArray = JSONArray.fromObject(list);
          String json = jsonArray.toString();
          System.out.println("json="+json);
          response.getWriter().write(json);
    }

2 前端JSP,頁面整體骨架:
<script type="text/javascript" src="js/jquery-1.11.3.min.js" ></script>
<script type="text/javascript" src="js/json.js" charset="utf-8"></script>
<!-- <script type="text/javascript" src="js/city.js" charset="utf-8"></script> -->
<body>
省份:
<select name="province" id="province">
    <option value="">-請選擇-
    <option value="1">廣東
    <option value="2">湖南
    <option value="3">四川
</select>
城市:
<select name="city" id="city">
    <option value="">-請選擇-
</select>

3 JS,實現省市聯動功能
$(function(){ 
    // 1 找到省份元素
    $("#province").change(function(){
        //2  一旦裏面的值發生改變,發送請求
        var pid = $(this).val();
        /*json=[
                {"cname":"深圳","id":1,"pid":1},
                {"cname":"東莞","id":2,"pid":1}
                 ...
                ]*/
        $.post("/8BDSearch/CityServlet02",{pid:pid},function(data,status){
//         清空以前的數據
            $("#city").html("<option value=‘‘>---請選擇");
          //遍歷
          $(data).each(function(index , c) {
//            alert(c.cname);
             $("#city").append("<option value=‘"+c.id+"‘>"+c.cname); 
        });
        },"json");
    });
});

 

十八 JQuery&Ajax&Json&Xstream