亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Ajax詳解及其案例分析

2019-11-15 00:34:55
字體:
來源:轉載
供稿:網友
Ajax詳解及其案例分析

本節主要內容預覽:

1 獲得Ajax對象

2 使用Ajax對象發送GET請求

3 使用Ajax對象發送POST請求

4 使用Ajax校驗用戶名

5 POST請求時的亂碼處理

6 GET請求時的亂碼處理

7 使用Ajax實現級聯的下拉列表

1 獲得Ajax對象

1.1 問題

如何獲得xmlHttPRequest對象。

1.2 方案

區分瀏覽器,使用不同的獲取方式。

1.3 步驟

步驟一: 新建ajax01.html頁面

新建一個Web工程,在WebRoot下新建ajax01.html頁面。在<script>標記內編寫javaScript代碼實現獲取Ajax對象。

<script type="text/Javascript">            /*獲取Ajax對象*/            function getXhr(){                var xhr = null;                //確保IE7,IE8,Firefox下可以運行                if(window.xmlhttpRequest){                    xhr = new XMLHttpRequest();                }else{                    //確保IE6可以運行,無視更古老的IE瀏覽器                    xhr = new ActiveXObject("Microsoft.XMLHttp");                }                return xhr;                    //更簡易的寫法                //xhr = window.XMLHttpRequest?                //    new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHttp");                }            </script>

步驟二: 部署項目訪問ajax01.html頁面

訪問頁面如圖-2所示。

圖 – 2

點擊鏈接:

圖 - 3

使用IE測試結果如圖-4所示。

圖 – 4

注意:本次測試使用的是IE11,但IE的早期5.5,6.0版本創建的都是ActiveXObject類型的。從IE7開始支持創建XMLHttpRequest的方式來獲取Ajax對象。

1.4 完整代碼

ajax01.html文件代碼如下:

<html>    <head>        <title>ajax01.html</title>        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">        <script type="text/javascript">            /*獲取Ajax對象*/            function getXhr(){                var xhr = null;                //確保IE7,IE8,FireFox下可以運行                if(window.XMLHttpRequest){                    xhr = new XMLHttpRequest();                }else{                    //確保IE6可以運行,無視更古老的IE瀏覽器                    xhr = new ActiveXObject("Microsoft.XMLHttp");                }                return xhr;                    //更簡易的寫法                //xhr = window.XMLHttpRequest?                //    new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHttp");                }            </script>    </head>    <body>        <!-- 獲取XMLHttpRequest對象 -->        <a href="javascript:;" onclick="alert(getXhr());"> 獲取Ajax對象 </a>    </body></html>

2 使用Ajax對象發送GET請求

2.1 問題

使用Ajax對象發送GET類型的請求,從服務器端獲取一小段文本。

2.2 方案

遵循創建Ajax對象,創建請求,設置回調函數,發送請求的步驟來完成一次異步請求。

2.3 步驟

步驟一: 新建ajax02.html頁面

步驟二: 添加getText()方法,并補充超鏈接對該方法的調用

<html>    <head>        <title>ajax02.html</title>        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">        <script type="text/javascript">                    function getXhr(){                var xhr = null;                if(window.XMLHttpRequest){                    xhr = new XMLHttpRequest();                }else{                    xhr = new ActiveXObject("Microsoft.XMLHttp");                }                return xhr;                    }                        function getText(){                //1.獲取Ajax對象                var xhr = getXhr();                     //2.設置回調函數                    xhr.onreadystatechange=function(){                                    if(xhr.readyState==4 && xhr.status==200){                        var txt = xhr.responseText;                        alert(txt);                    }                };                //3.創建請求                xhr.open("get","get_text.do",true);                  //4.發送請求                xhr.send(null);            }           </script>    </head>    <body>        <!-- 獲取服務器端一小段文本 -->        <a href="javascript:;" onclick="getText()">獲取文本</a>    </body></html>

步驟三: 編寫ActionServlet類

package web;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ActionServlet extends HttpServlet {    public void service(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        response.setContentType("text/html;charset=UTF-8");        PrintWriter out = response.getWriter();        //獲取請求資源路徑        String uri = request.getRequestURI();        String path = uri.substring(                uri.lastIndexOf("/"),                uri.lastIndexOf("."));        if(path.equals("/get_text")){//get請求            out.println("get請求-服務器返回的數據");        }        out.close();    }}

步驟四: 部署、運行,查看結果

點擊鏈接:

2.4 完整代碼

ajax02.html頁面代碼:

<html>  <head>    <title>ajax02.html</title>        <meta http-equiv="Content-Type"          content="text/html; charset=UTF-8">    <script type="text/javascript">        function getXhr(){            var xhr = null;            if(window.XMLHttpRequest){                xhr = new XMLHttpRequest();            }else{                xhr = new ActiveXObject("Microsoft.XMLHttp");            }            return xhr;                }        function getText(){            //1.獲取Ajax對象            var xhr = getXhr();                //2.設置回調函數                xhr.onreadystatechange=function(){                                if(xhr.readyState==4 && xhr.status==200){                    var txt = xhr.responseText;                    alert(txt);                }            };//3.創建請求            xhr.open("get","get_text.do",true);             //4.發送請求            xhr.send(null);        }      </script>  </head>  <body>    <!-- 獲取服務器端一小段文本 -->    <a href="javascript:;" onclick="getText()">獲取文本</a>  </body></html>

ActionServlet.java頁面代碼:

package web; import java.io.IOException;import java.io.PrintWriter; import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse; public class ActionServlet extends HttpServlet {     public void service(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {         response.setContentType("text/html;charset=UTF-8");        PrintWriter out = response.getWriter();        //獲取請求資源路徑        String uri = request.getRequestURI();        String path = uri.substring(                uri.lastIndexOf("/"),                uri.lastIndexOf("."));        if(path.equals("/get_text")){//get請求            out.println("來自星星的你");        }        out.close();    } }

web.xml文件代碼:

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5"    xmlns="http://java.sun.com/xml/ns/javaee"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  <display-name></display-name>  <servlet>    <servlet-name>ActionServlet</servlet-name>    <servlet-class>web.ActionServlet</servlet-class>  </servlet>  <servlet-mapping>    <servlet-name>ActionServlet</servlet-name>    <url-pattern>*.do</url-pattern>  </servlet-mapping>    </web-app>

3 使用Ajax對象發送POST請求

3.1 問題

使用Ajax對象發送POST類型的請求,并向服務器提交一小段文本,顯示從服務器端返回的文本。

3.2 方案

遵循GET請求方式的4步基礎上,多增加一個設定,設定請求頭中的content-type屬性的值為application/x-www-form-urlencoded

3.3 步驟

步驟一: 新建my.js文件

在WebRoot節點下,新增一個文件夾“js”。在該文件夾中新增一個文件,名為my.js。將獲取XMLHttpRequest對象的方法拷貝到該文件中,便于更多頁面重用該方法。

my.js 代碼:

function getXhr() {    var xhr = null;    if (window.XMLHttpRequest) {        xhr = new XMLHttpRequest();    } else {        xhr = new ActiveXObject("Microsoft.XMLHttp");    }    return xhr;}

步驟二: 新建ajax03.html頁面

步驟三: 編寫getText()方法

<html>    <head>        <title>ajax03.html</title>        <meta http-equiv="Content-Type" content="type=text/html;charset=UTF-8">        <script type="text/javascript" src="js/my.js"></script>        <script type="text/javascript">        function getText(){            var xhr = getXhr();            xhr.onreadystatechange=function(){                if(xhr.readyState==4 && xhr.status==200){                    alert(xhr.responseText);                }            };          xhr.open("post","post_text.do",true);            xhr.setRequestHeader('content-type',                'application/x-www-form-urlencoded');            xhr.send("uname=daliu_it");        }    </script>    </head>    <body>        <!-- 使用Ajax對象發送POST類型請求,并獲取文本 -->        <input type="button" onclick="getText()" value="POST請求" />    </body></html>

步驟四: 修改ActionServlet

package web;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ActionServlet extends HttpServlet {    public void service(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        response.setContentType("text/html;charset=UTF-8");        request.setCharacterEncoding("UTF-8");        PrintWriter out = response.getWriter();        //獲取請求資源路徑        String uri = request.getRequestURI();        String path = uri.substring(                uri.lastIndexOf("/"),                uri.lastIndexOf("."));        if(path.equals("/get_text")){//get請求            out.println("get請求-服務器返回的數據");        }else if(path.equals("/post_text")){//post請求            String name = request.getParameter("uname");            System.out.println(name);            out.println("又來了一次的" + name);        }                out.close();    }}

步驟五: 運行,查看結果

3.4 完整代碼

ajax03.html文件代碼如下:

<html>  <head>    <title>ajax03.html</title>        <meta  http-equiv="Content-Type"           content="type=text/html;charset=UTF-8">    <script type="text/javascript" src="js/my.js"></script>    <script type="text/javascript">        function getText(){            var xhr = getXhr();            xhr.onreadystatechange=function(){                if(xhr.readyState==4 && xhr.status==200){                    alert(xhr.responseText);                }            };          xhr.open("post","post_text.do",true);            xhr.setRequestHeader('content-type',                'application/x-www-form-urlencoded');            xhr.send("uname=daliu_it");        }    </script>  </head>   <body>  <!-- 使用Ajax對象發送POST類型請求,并獲取文本 -->  <input type="button" onclick="getText()" value="POST請求"/>  </body></html>

ActionServlet.java文件代碼如下:

package web;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ActionServlet extends HttpServlet {    public void service(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        response.setContentType("text/html;charset=UTF-8");        PrintWriter out = response.getWriter();        // 獲取請求資源路徑        String uri = request.getRequestURI();        String path = uri.substring(uri.lastIndexOf("/"), uri.lastIndexOf("."));        if (path.equals("/get_text")) {// get請求            out.println("get請求-服務器返回的數據");        } else if (path.equals("/post_text")) {// post請求            String name = request.getParameter("uname");            System.out.println(name);            out.println("又來了一次的" + name);        }         out.close();    }}

web.xml文件代碼。

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">    <display-name></display-name>    <servlet>        <servlet-name>ActionServlet</servlet-name>        <servlet-class>web.ActionServlet</servlet-class>    </servlet>    <servlet-mapping>        <servlet-name>ActionServlet</servlet-name>        <url-pattern>*.do</url-pattern>    </servlet-mapping></web-app>

my.js文件代碼。

function getXhr() {    var xhr = null;    if (window.XMLHttpRequest) {        xhr = new XMLHttpRequest();    } else {        xhr = new ActiveXObject("Microsoft.XMLHttp");    }    return xhr;}

4 使用Ajax校驗用戶名

4.1 問題

實現注冊功能中,用戶名是否可用的校驗。

4.2 方案

填寫完用戶名后,通過點擊后面的按鈕進行驗證。并顯示服務器返回的說明信息。

4.3 步驟

步驟一: 新建regist.html文件

<body>        <!-- 驗證注冊信息中的用戶名是否可用 -->        <form action="" method="post">            <fieldset>                <legend>                    注冊信息                </legend>                用戶名:                <input name="uname" id="uname" />                <input type="button" value="檢查一下吧" onclick="check_name()" />                <span id="name_msg" style="color: red;"></span>                <br />                <br />                <input type="submit" value="注冊" />            </fieldset>        </form>    </body>

步驟二: 編寫check_name()方法

<script type="text/javascript">            function check_name(){                               var xhr = getXhr();                            xhr.onreadystatechange=function(){                    if(xhr.readyState==4 && xhr.status==200){                        document.getElementById("name_msg")                                .innerHTML = xhr.responseText;                    }                };                xhr.setRequestHeader('content-type',                    'application/x-www-form-urlencoded');              xhr.open("post","check_name.do",true);                document.getElementById("name_msg")                                .innerHTML="正在檢查。。。";                var uname = document.getElementById("uname");                xhr.send("uname="+uname.value);            }           </script>

document.getElementById(“name_msg”).innerHTML=“正在檢查“;這行代碼在服務器還沒有返回信息之前,為用戶提供良好的交互體驗。

步驟三: 修改ActionServlet.java文件

package web;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ActionServlet extends HttpServlet {    public void service(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        response.setContentType("text/html;charset=UTF-8");        PrintWriter out = response.getWriter();        // 獲取請求資源路徑        String uri = request.getRequestURI();        String path = uri.substring(uri.lastIndexOf("/"), uri.lastIndexOf("."));        if (path.equals("/get_text")) {// get請求            out.println("get請求-服務器返回的數據");        } else if (path.equals("/post_text")) {// post請求            String name = request.getParameter("uname");            System.out.println(name);            out.println("又來了一次的" + name);        } else if (path.equals("/check_name")) {// 檢查用戶名            String name = request.getParameter("uname");            // 模擬網絡延遲的操作            if (1 == 1) {                try {                    Thread.sleep(6000);                } catch (InterruptedException e) {                    e.printStackTrace();                }            }            System.out.println(name);            if ("Luffy".equals(name)) {                out.println("該用戶名不可用");            } else {                out.println("可以使用!");            }        }        out.close();    }}

說明:

xhr.open("post","check_name.do",true);xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded');

這倆句的順序不能顛倒,不然沒有想要的效果。

步驟四: 運行,查看結果

輸入不可用的用戶名:

輸入可用的用戶名

完整代碼

regist.html文件代碼如下:

<html>    <head>        <title>regist.html</title>        <meta http-equiv="content-type" content="text/html; charset=UTF-8">        <script type="text/javascript" src="js/my.js"></script>        <script type="text/javascript">            function check_name(){                               var xhr = getXhr();                            xhr.onreadystatechange=function(){                    if(xhr.readyState==4 && xhr.status==200){                        document.getElementById("name_msg")                                .innerHTML = xhr.responseText;                    }                };                xhr.open("post","check_name.do",true);                xhr.setRequestHeader('content-type',                    'application/x-www-form-urlencoded');                             document.getElementById("name_msg")                                .innerHTML="正在檢查。。。";                var uname = document.getElementById("uname");                xhr.send("uname="+uname.value);            }           </script>    </head>    <body>        <!-- 驗證注冊信息中的用戶名是否可用 -->        <form action="" method="post">            <fieldset>                <legend>                    注冊信息                </legend>                用戶名:                <input name="uname" id="uname" />                <input type="button" value="檢查一下吧" onclick="check_name()" />                <span id="name_msg" style="color: red;"></span>                <br />                <br />                <input type="submit" value="注冊" />            </fieldset>        </form>    </body></html>

ActionServlet.java文件代碼如下:

package web;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ActionServlet extends HttpServlet {    public void service(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        response.setContentType("text/html;charset=UTF-8");        PrintWriter out = response.getWriter();        // 獲取請求資源路徑        String uri = request.getRequestURI();        String path = uri.substring(uri.lastIndexOf("/"), uri.lastIndexOf("."));        if (path.equals("/get_text")) {// get請求            out.println("get請求-服務器返回的數據");        } else if (path.equals("/post_text")) {// post請求            String name = request.getParameter("uname");            System.out.println(name);            out.println("又來了一次的" + name);        } else if (path.equals("/check_name")) {// 檢查用戶名            String name = request.getParameter("uname");            // 模擬網絡延遲的操作            if (1 == 1) {                try {                    Thread.sleep(6000);                } catch (InterruptedException e) {                    e.printStackTrace();                }            }            System.out.println(name);            if ("Luffy".equals(name)) {                out.println("該用戶名不可用");            } else {                out.println("可以使用!");            }        }        out.close();    }}

if(xhr.readyState==4 && xhr.status==200){ document.getElementById("name_msg") .innerHTML = xhr.responseText; }

說明:

// 模擬網絡延遲的操作 if (1 == 1) { try { Thread.sleep(6000); } catch (InterruptedException e) { e.printStackTrace(); } }

這個是為了模擬一個等待的效果。

5 POST請求時的亂碼處理

5.1 問題

在上例中,如果填寫的用戶名為中文信息時,就會出現下圖所示的結果。在控制臺中打印服務器端獲取的數據為亂碼。但火狐瀏覽器提交的中文 可以被服務器端正確識別。原因是火狐會告訴服務器端以什么方式解碼。而IE瀏覽器和Chrome瀏覽器提交的數據,到了服務器端都是以默認解碼方式 ISO-8859-1來解析的,而提交時瀏覽器依據meta標記指定的UTF-8的方式進行的編碼,編碼解碼不一致就會導致亂碼出現。如何解決?

5.2 方案

在獲取表單提交的數據之前,設置服務器端的解碼方式為UTF-8即可。

5.3 步驟

步驟一: 修改ActionServlet類

在service方法中增加一行代碼即可:

 request.setCharacterEncoding("UTF-8");

步驟二: 重新運行regist.html頁面

重新運行程序,分別使用Chrome、IE、FireFox瀏覽器來訪問regist.html頁面,測試中文情況,可以正確得到表單以POST方式提交的中文字符了。

6 GET請求時的亂碼處理

6.1 問題

在regist.html頁面中,如果將表單的提交方式更換為get,并且服務器端依然保留UTF-8的解碼代碼,運行程序時,依然會有如圖所示的亂碼問題。如何解決?

6.2 方案

產生亂碼的原因是,以GET方式提交的數據存在于提交的消息頭中URL中,HTTP協議對于URI的編碼方式為UTF-8,但是URI后面的 查詢字符串的編碼方式卻是ISO-8859-1。到了服務器端,容器針對URI的解碼方式是ISO-8859-1,依然解析不了中文,所以,會出現亂碼。 為了能夠支持地址中查詢字符串的中文格式,需要在瀏覽器端和服務器端同時進行支持UTF-8格式編碼、解碼的設置。

6.3 步驟

步驟一: 修改tomcat的默認解碼設置

修改tomcat安裝路徑下conf/server.xml文件。找到Connector節點后,增加URIEncoding="UTF-8"這個屬性即可。

步驟二: 新建regist01.html頁面

新建regist01.html文件,表單內容參考regist.html,Ajax的請求修改為GET方式,為了讓URL整體都使用 UTF-8的方式進行編碼,需要使用JavaScript語言中的encodeURI()方法,所以在open方法創建請求時,第二個URI參數要使用 encodeURI方法進行編碼。如圖-27所示。

步驟三: ActionServlet保持不變

步驟四: 運行,查看結果

6.4 完整代碼

regist01.html文件代碼如下:

    <html>      <head>        <title>regist01.html</title>        <meta http-equiv="content-type" content="text/html; charset=UTF-8">        <script type="text/javascript" src="js/my.js"></script>        <script type="text/javascript">            function check_name(){                            var uname = document.getElementById("uname");                var uri = "check_name.do?uname="+uname.value;                            var xhr = getXhr();                          xhr.onreadystatechange=function(){                    if(xhr.readyState==4 && xhr.status==200){                                            document.getElementById("name_msg").innerHTML                         = xhr.responseText;                    }                };                xhr.open("get",encodeURI(uri),true);                                        document.getElementById("name_msg").innerHTML="正在檢查。。。";                xhr.send(null);            }           </script>          </head>        <body>        <!-- GET方式提交中文用戶名進行驗證 -->        <form action="" method="post">            <fieldset>                <legend>注冊信息</legend>                用戶名:<input name="uname" id="uname"/>                <input type="button" value="檢查一下吧" onclick="check_name()"/>                <span id="name_msg" style="color:red;"></span>                 <br/><br/>                <input type="submit" value="注冊"/>            </fieldset>            </form>      </body>    </html>

ActionServlet.java文件代碼如下:

package web;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ActionServlet extends HttpServlet {    public void service(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        response.setContentType("text/html;charset=UTF-8");        request.setCharacterEncoding("UTF-8");        PrintWriter out = response.getWriter();        // 獲取請求資源路徑        String uri = request.getRequestURI();        String path = uri.substring(uri.lastIndexOf("/"), uri.lastIndexOf("."));        if (path.equals("/get_text")) {// get請求            out.println("get請求-服務器返回的數據");        } else if (path.equals("/post_text")) {// post請求            String name = request.getParameter("uname");            System.out.println(name);            out.println("又來了一次的" + name);        } else if (path.equals("/check_name")) {// 檢查用戶名            String name = request.getParameter("uname");            // 模擬網絡延遲的操作            if (1 == 1) {                try {                    Thread.sleep(6000);                } catch (InterruptedException e) {                    e.printStackTrace();                }            }            System.out.println(name);            if ("Luffy".equals(name)) {                out.println("該用戶名不可用");            } else {                out.println("可以使用!");            }        }        out.close();    }}

7 使用Ajax實現級聯的下拉列表

7.1 問題

實現市區的級聯下拉列表。即,選擇城市后,動態加載該城市包含的區域信息。

7.2 方案

下拉列表發生onchange事件時,將選中的城市對應的value發送給服務器端,服務器端收到這個城市拼音 縮寫后,進行比對,返回區域的組合信息??蛻舳耸盏叫畔⒑蠓謩e按照“;“和”,“進行分割,然后構建option對象,添加到區域對應的下拉列表中。

7.3 步驟

步驟一: 修改my.js文件

修改my.js文件,增加兩個便于定位html頁面中元素的方法,以及便于讀取元素value屬性的方法。

function $(id) {    return document.getElementById(id);}function $F(id) {    return $(id).value;}

步驟二: 新建select.html文件

編寫頁面中的下拉列表。并且在onchange事件時,將選中項的value屬性作為參數傳給getCity方法。

<body>        <!-- Ajax實現級聯下拉列表 -->        <select id="s1" style="width: 120px;" onchange="getCity(this.value);">            <option value="bj">                北京            </option>            <option value="sh">                上海            </option>            <option value="gz">                廣州            </option>        </select>        <select id="s2" style="width: 120px;">        </select>    </body>

步驟三: 編寫Ajax代碼

    <script type="text/javascript">        function getCity(v1) {            var xhr = getXhr();                    xhr.onreadystatechange = function() {                if (xhr.readyState == 4 && xhr.status==200) {                    var txt = xhr.responseText;                    //靜安,ja;黃浦,hp;浦東新,pdx                    var strs = txt.split(';');                    //先清空s2                    $('s2').innerHTML = '';                    for (i = 0; i < strs.length; i++) {                        var str1s = strs[i].split(',');                        /*構造一個Option對象 */                        var op = new Option(str1s[0], str1s[1]);                        /* options是select的一個屬性,                              其值是一個數組。數組中的元素是Option對象。                        */                        $('s2').options[i] = op;                    }                }            };         xhr.open('get', 'getCity.do?name=' + v1, true);            xhr.send(null);        }    </script>

步驟四: 修改ActionServlet,添加對getCity.do的請求處理

else if(path.equals("/getCity")){//城市列表聯動            String name = request.getParameter("name");            if("bj".equals(name)){                out.println("朝陽,cy;東城,dc");            }else if("sh".equals(name)){                out.println("靜安,ja;黃浦,hp;浦東新,pdx");            }else{                out.println("白云,by;番禺,py");            }        }

步驟五:訪問,查看運行結果

7.4 完整代碼

js/my.js文件代碼如下:

function getXhr() {    var xhr = null;    if (window.XMLHttpRequest) {        xhr = new XMLHttpRequest();    } else {        xhr = new ActiveXObject("Microsoft.XMLHttp");    }    return xhr;}function $(id) {    return document.getElementById(id);}function $F(id) {    return $(id).value;}

select.html文件代碼如下 :

<html>    <head>        <title>select.html</title>        <meta http-equiv="content-type" content="text/html; charset=UTF-8">        <script type="text/javascript" src="js/my.js"></script>        <script type="text/javascript">        function getCity(v1) {            var xhr = getXhr();                    xhr.onreadystatechange = function() {                if (xhr.readyState == 4 &
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲人成在线免费观看| 欧美精品性视频| 亚洲最大在线视频| 亚洲3p在线观看| 伊是香蕉大人久久| 欧美大尺度在线观看| 欧美性猛xxx| 亚洲成人久久网| 亚洲大胆人体在线| 国产激情视频一区| 精品亚洲男同gayvideo网站| 日本国产高清不卡| 国产在线观看精品一区二区三区| 欧美大片大片在线播放| 黄色一区二区三区| 色婷婷久久一区二区| 日韩精品视频在线免费观看| 最近的2019中文字幕免费一页| 一本色道久久88综合亚洲精品ⅰ| 国产精品视频xxx| 国产精品wwww| 欧美性色视频在线| 日韩欧美亚洲国产一区| 欧美日韩在线免费观看| 欧美成人手机在线| www.xxxx精品| 亚洲国产美女精品久久久久∴| 欧美成年人视频网站| 欧美—级a级欧美特级ar全黄| 一区二区三区视频免费在线观看| 菠萝蜜影院一区二区免费| 亚洲自拍在线观看| 亚洲天堂av图片| 黄色精品在线看| 精品magnet| 午夜美女久久久久爽久久| 久久99国产精品自在自在app| 亚洲女人天堂成人av在线| 性欧美长视频免费观看不卡| 91九色蝌蚪国产| 亚洲精品丝袜日韩| 欧美亚洲激情在线| 亚洲图片在线综合| 久久99青青精品免费观看| 国产色视频一区| 久久99国产综合精品女同| 亚洲国产欧美在线成人app| 亚洲天堂av女优| 欧美高跟鞋交xxxxhd| 成人国产精品色哟哟| www.亚洲成人| 国产精品美女久久久久久免费| 国产69精品99久久久久久宅男| 日韩欧美成人免费视频| 久久噜噜噜精品国产亚洲综合| 国产精品福利网站| 精品一区二区电影| 成人午夜小视频| 欧美黑人巨大精品一区二区| 国产日产欧美精品| 国产精品久久久久久久久免费| 国模精品视频一区二区三区| 欧美日韩国产第一页| 国产精品久久久久9999| 久久久久久久av| 日韩一区二区福利| 亚洲电影免费观看高清完整版在线观看| 亚洲视频欧美视频| 欧美日韩国产一中文字不卡| 亚洲欧美日韩中文视频| 久久精品成人一区二区三区| 国产午夜精品视频| 国产亚洲精品91在线| 中文字幕亚洲一区在线观看| 日韩欧美国产视频| 亚洲综合日韩中文字幕v在线| 欧美性资源免费| 777午夜精品福利在线观看| 欧美裸体xxxx极品少妇软件| 国产精品99久久久久久久久| 午夜精品久久久久久久白皮肤| 久久久亚洲精选| 国产精品亚洲第一区| 久久久久女教师免费一区| 国内精品在线一区| 91精品久久久久久久久久久| 亚洲最大福利网| 精品国产一区二区三区久久狼5月| 欧美大片免费观看| 日韩成人激情视频| 亚洲aa中文字幕| 91精品国产91久久久| 中文字幕亚洲色图| 国产激情999| 精品国模在线视频| 欧美疯狂性受xxxxx另类| 欧美电影在线播放| 亚洲欧洲一区二区三区在线观看| 亚洲精品乱码久久久久久金桔影视| 亚洲精品丝袜日韩| 日韩在线观看你懂的| 亚洲久久久久久久久久久| 欧美韩日一区二区| 麻豆国产精品va在线观看不卡| 国产精品久久久久久久午夜| 欧美电影免费观看高清| 欧美日韩在线一区| 97视频人免费观看| 国产精品va在线播放| 欧美大人香蕉在线| 日韩中文字幕第一页| 欧美电影免费看| xxxx性欧美| 久久久中精品2020中文| 国产欧美精品一区二区| 久久高清视频免费| 久久av.com| 亚洲国产精品久久久久秋霞不卡| 亚洲欧美成人网| 日韩在线视频网| 精品国内产的精品视频在线观看| 久久艳片www.17c.com| 欧美日韩一区二区免费视频| 亚洲国产精品电影| 国产精品福利在线观看网址| 日韩亚洲第一页| 成人黄色免费看| 欧美床上激情在线观看| 欧美日韩国产精品一区| 国产精品三级久久久久久电影| 精品国内亚洲在观看18黄| 久久精品国产久精国产一老狼| 亚洲97在线观看| 成人欧美一区二区三区在线| 亚洲精美色品网站| 裸体女人亚洲精品一区| 国产精品扒开腿爽爽爽视频| 97久久精品人搡人人玩| 欧美一级片久久久久久久| 久久夜色精品国产| 欧美最猛性xxxx| 久久夜精品香蕉| 欧洲亚洲妇女av| 亚洲国产私拍精品国模在线观看| 午夜精品国产精品大乳美女| 亚洲成人久久网| 国产欧美日韩中文| 欧美成人午夜剧场免费观看| 亚洲三级免费看| 欧美电影电视剧在线观看| 中文字幕在线成人| 亚洲精品www久久久久久广东| 久久香蕉频线观| 亚洲aⅴ男人的天堂在线观看| 国产精品色午夜在线观看| 久久91精品国产91久久跳| 亚洲在线免费看| 欧美日本黄视频| 亚洲人成网站777色婷婷| 国产精品99一区| 国产午夜精品全部视频在线播放| 欧美日韩另类视频| 欧美激情综合色| 欧美高清自拍一区|