Jquery加強2


一)jQuery常用AJAX-API

    目的:簡化客戶端與服務端進行局部刷新的異步通訊

   (1)取得服務端當前時間

             簡單形式:jQuery對象.load(url)

                             返回結果自動添加到jQuery對象代表的標籤中間

                             如果是Servlet的話,採用的是GET方式

        複雜形式:jQuery對象.load(url,sendData,function(backData,textStatus,ajax){......})

                             sendData ={"user.name":"jack","user.pass":"123"};

                             以JSON格式文本方式發送,使用POST方式發送,服務端能收到數據

        注意:對於load方法而言,如果請求體無參數發送的話,load方法

採用GET方式提交

        注意:對於load方法而言,如果請求體有參數發送的話,load方法

採用POST方式提交

注意:使用load方法時,自動進行編碼,無需手工編碼

    <script type="text/javascript">

       $(":button").click(function(){

           var url = "${pageContext.request.contextPath}/loadTimeRequest?time"+new Date().getTime();

           var sendData = null;

           $.load(url,sendData,function(a,b,ajax){

              var jsonJAVA = ajax.responseText;

              var jsonJS = eval("("+jsonJAVA+")");

              var strTime = jsonJS.strTime;

               $("span:first").html(strTime).css("color","red");

               $("span:last").html(strTime).css("color","blue");

           });

           //$("span").load(url);

       });

    </script>

 

        load()方法參數解釋:

            參數一:url發送到哪裏去

            參數二: sendData發送請求體中的數據,符合JSON格式,例如:{key:value,key:value}

            參數三:function處理函數,類似於傳統方式ajax.onreadystatechange = 處理函數

 

            其中參數三爲function處理函數最多可以接收三個參數,含義如下

                   第一個參數:服務端返回的數據,例如:backData

                   第二個參數:服務端狀態碼的文本描述,例如:success、error、

                   第三個參數:ajax異步對象,即XMLHttpRequest對象

        以上所有參數的名字可以任意,但必須按順序書寫,儘量做到見名知意

        

   (2)檢查註冊用戶名和密碼是否存在

       $.get(url,sendData,function(backData,textStatus,ajax){... ...})

       $.post(url,sendData,function(backData,textStatus,ajax){... ...})趙君提倡

        注意:使用get或post方法時,自動進行編碼,無需手工編碼

 

   (3)jQuery對象.serialize()

        作用:自動生成JSON格式的文本

             注意:爲每個jQuery對象設置一個name屬性,因爲name屬性會被認爲請求參數名

            注意:必須用<form>標籤元素

             適用:如果屬性過多,強烈推薦採用這個API

    <script type="text/javascript">

       //定位按鈕,同時添加單擊事件

       $(":button").click(function(){

           //獲取用戶名和密碼

           var username = $(":text:first").val();

           var password = $(":text:last").val();

           //去空格

           username = $.trim(username);

           password = $.trim(password);

           //異步發送到服務端

           var url = "${pageContext.request.contextPath}/checkRequest?time="+new Date().getTime();

           /*手工書寫JSON文本

           var sendData = {

              "user.username":username,

               "user.password":password

           };

           */

           /*工具生成JSON文本*/

           var sendData = $("form").serialize();

           $.post(url,sendData,function(backData,textStatus,ajax){

              //backData是一個JSON文本/對象,你得通過.號訪問其屬性值

              var tip = backData.tip;

              //創建img節點

              var $img = $("<img src='" + tip + "' height='18px' widht='18px'/>")

              //清空span節點中的內容

              $("span").text("");

              //img節點添加到span節點中

              $("span").append( $img );

           });

       });

    </script>

       

public class RegisterAction extends ActionSupport{

    private User user;

    public User getUser() {

       return user;

    }

    public void setUser(User user) {

       this.user = user;

    }

    /**

     * 檢查註冊用戶名和密碼是否存在

     */

    public String checkMethod() throws Exception {

       tip = "images/MsgSent.gif";

       if("帥帥".equals(user.getUsername()) && "123".equals(user.getPassword())){

           tip = "images/MsgError.gif";

       }

       return "ok";

    }

    private String tip;

    public String getTip() {

       return tip;

    }

    /**

     * var backData = {

     *               "tip":"images/MsgError.gif"

     *              }

     */

}

 

   (4)jQuery解析XML

<?xml version="1.0" encoding="UTF-8"?>

<root>

    <city>廣州</city>

    <city>中山</city>

    <city>深圳</city>

    <city>佛山</city>

    <city>珠海</city>

</root>

       

<script type="text/javascript">

       $(":button").click(function(){

           var url = "${pageContext.request.contextPath}/03_city.xml";

           var sendData = null;

           $.get(url,sendData,function(backData,textStatus,ajax){

              /*

              //xml文件轉成jquery對象,目的是用jquery api解析xml文件

              var $xml = $(backData);

              var $city = $xml.find("city");

              $city.each(function(){

                  //獲取每一個city節點

                  var city = $(this).text();

                  alert(city);

              });

              */

              var xml = ajax.responseXML;

              var $xml = $(xml);

              var $city = $xml.find("city");

              $city.each(function(){

                  //獲取每一個city節點

                  var city = $(this).text();

                  alert(city);

              });

           });

       });

    </script>

 

   (5)省份-城市,基於jQuery的AJAX二級聯動,用Struts2整合AJAX【非數據庫版】

        $.ajax(

                {

                         type:"POST",

                         url:"${pageContext.request.contextPath}/findCityByProvinceRequest?id="+newDate().getTime(),

                         data:{"province":province},

                         success:function(backData,textStatus,ajax){}

            }

        );

        注意:這裏每個key值不能亂寫

    <select id="province">

       <option>選擇省份</option>

       <option>廣東</option>

       <option>湖南</option>

    </select>

    <select id="city">

       <option>選擇城市</option>

    </select>

       

<script type="text/javascript">

       $("#province").change(function(){

           //刪除原城市下拉框中的內容,除第一項外

           $("#city option:gt(0)").remove();

           var province = $("#province option:selected").text();

           if("選擇省份" != province){

              $.ajax({

                  "type":"POST",

                  "url":"${pageContext.request.contextPath}/findCityByProvince?time="+new Date().getTime(),

                  "sendData":{"province":province},

                  "success":function(backData,textStatus,ajax){

                     //js對象

                     var city = backData.cityList;

                     //jquery對象

                     var $city = $(city);

                     //each()

                     $city.each(function(){

                         //this表示每個城市

                         var $option = $("<option>" + this + "</option>");

                         $("#city").append( $option );

                     });

                  }

              });

           }

       });

    </script>

       

public class ProvinceCityAction extends ActionSupport{

    private String province;//廣東

    public void setProvince(String province) {

       this.province = province;

    }

    public String findCityByProvince() throws Exception {

       cityList = new ArrayList<String>();

       if("廣東".equals(province)){

           cityList.add("湛江");

           cityList.add("汕頭");

       }else if("湖南".equals(province)){

           cityList.add("邵陽");

           cityList.add("瀏陽");

       }

       return "ok";

    }

    private List<String> cityList;

    public List<String> getCityList() {

       return cityList;

    }

    /**

     * var backData = {

     *                 "cityList":["邵陽","瀏陽"]

     *              }

     */

}

       

<struts>

 

   <package name="timePackage" extends="json-default" namespace="/">

      

       <global-results>

           <result name="ok" type="json"/>

       </global-results>

 

       <!-- 獲取服務端時間 -->

       <action

           name="loadTimeRequest"

           class="cn.itcast.javaee.js.time.TimeAction"

           method="loadTimeMethod"/>

 

       <!-- 檢查用戶名和密碼是否存在 -->

       <action

           name="checkRequest"

           class="cn.itcast.javaee.js.register.RegisterAction"

           method="checkMethod"/>

          

       <!-- 根據省份查詢城市 --> 

       <action

           name="findCityByProvince"

           class="cn.itcast.javaee.js.provincecity.ProvinceCityAction"

           method="findCityByProvince"/>

 

   </package>

 

</struts>



 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章