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

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

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

    隨筆-84  評論-56  文章-0  trackbacks-0
     

    發(fā)送請求參數

    Ø 目前我們已經講了

    1、 使用Ajax技術向服務器發(fā)送請求

    2、 也知道了可以采用多種方法解析服務器的響應。

    Ø 只缺少一個內容,就是未將任何數據作為請求的一部分發(fā)送給服務器。

    GET方法發(fā)送請求參數

    Ø GET方法:作為名/值對放在請求URL 中傳遞。

          * 資源URL 的問號后面就是名/值對。

          * 名/值對用 name=value 的形式,

           *  用與號(&)分隔。

    Ø 例如:

    http://localhost:8080/projectName?name=yifeng&password=hello

    POST 方法發(fā)送請求參數

    Ø POST 方法:將參數串放在請求體中發(fā)送。

    * 參數編碼為名/值對,形式為name=value

    * 用與號(&)分隔。

    使用GETPOST的建議

    Ø 獲取數據時應當使用GET 方法。

        * 數據處理不改變數據模型的狀態(tài)。

    Ø 存儲、更新數據,使用POST 方法。

        * 操作改變了數據模型的狀態(tài)。

    Ø 特點。

    * GET 請求的參數編碼到請求URL 中,可以為該URL 建立書簽。(不過,如果是異步請求就沒有什么用。)

    * GET 請求發(fā)送的數據量通常是固定的,而POST 方法可以發(fā)送任意量的數據。

    DEMO AJAX以名/值對發(fā)送請求參數

    Ø 使用GET請求和POST請求,創(chuàng)建查詢字符串技術是一樣的。

    Ø 唯一的區(qū)別是,GET發(fā)送請求時,查詢字符串追加到請求URL中,

    Ø POST方法時,在XHR對象的send()方法時發(fā)送查詢串。

    Ø DEMO

    getAndPostExample.html文件

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

            "http://www.w3.org/TR/html4/loose.dtd">

    <html>

    <head>

        <title>Dynamically Editing Page Content</title>

        <script type="text/javascript" language="javascript">

            var xmlHttp;

            function createXMLHttpRequest() {

                if (window.ActiveXObject) {

                    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

                } else if (window.XMLHttpRequest) {

                    xmlHttp = new XMLHttpRequest();

                }

            }

            function createQueryString() {

                var firstName = document.getElementById("firstName").value;

                var middleName = document.getElementById("middleName").value;

                var birthday = document.getElementById("birthday").value;

                var queryString = "firstName=" + firstName + "&middleName=" + middleName + "&birthday=" + birthday;///值對

                return queryString;

            }

            function doRequestUsingGET() {

                createXMLHttpRequest();

                var queryString = "GetAndPostExample?";

                queryString = queryString + createQueryString() + "&timeStamp=" + new Date().getTime();

                xmlHttp.onreadystatechange = handleStateChange;

                xmlHttp.open("GET", queryString, true);

                xmlHttp.send(null);

            }

            function doRequestUsingPOST() {

                createXMLHttpRequest();

                var url = "GetAndPostExample?timeStamp=" + new Date().getTime();

                //相同方法生成名/值對

                var queryString = createQueryString();

                xmlHttp.open("POST", url, true);

                xmlHttp.onreadystatechange = handleStateChange;

                xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

                xmlHttp.send(queryString);

            }

            function handleStateChange() {

                if (xmlHttp.readyState == 4) {

                    if (xmlHttp.status == 200) {

                        parseResults();

                    }

                }

            }

            function parseResults() {

                var responseDiv = document.getElementById("serverResponse");

                if (responseDiv.hasChildNodes()) {

                    responseDiv.removeChild(responseDiv.childNodes[0]);

                }

                var responseText = document.createTextNode(xmlHttp.responseText);

                responseDiv.appendChild(responseText);

            }

        </script>

    </head>

    <body>

    <h1>Entery your first name, middle name, and birthday:</h1>

    <table>

        <tbody>

            <tr>

                <td>First name:</td>

                <td><input type="text" id="firstName"/></td>

            </tr>

            <tr>

                <td>Middle name:</td>

                <td><input type="text" id="middleName"></td>

            </tr>

            <tr>

                <td>Birthday:</td>

                <td><input type="text" id="birthday"/></td>

            </tr>

        </tbody>

    </table>

    <form action="#">

        <input type="button" value="Send parameters using GET" onclick="doRequestUsingGET();"/>

        <br/><br/>

        <input type="button" value="Send parameters using POST" onclick="doRequestUsingPOST();"/>

    </form>

    <br/>

    <h2>Server Response:</h2>

    <div id="serverResponse"></div>

    </body>

    </html>

    GetAndPostExample.java文件

    package org.yifeng.webapp.servlet;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    import javax.servlet.ServletException;

    import java.io.IOException;

    import java.io.PrintWriter;

    /**

     * Copyright:       晟軟科技

     * WebSit:          http://www.shengruan.com

     * Author:          憶風

     * QQ:              583305005

     * MSN:             YiFengs@msn.com

     * Email:           zhdqCN@gmail.com

     * CreationTime:    2008-8-25 22:44:44

     * Description:

     */

    public class GetAndPostExample extends HttpServlet {

        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

            response.setContentType("text/xml");

            String firstName = request.getParameter("firstName");

            String middleName = request.getParameter("middleName");

            String birthday = request.getParameter("birthday");

            StringBuilder responseText = new StringBuilder();

            responseText.append("Hello, ").append(firstName).append(" " + middleName)

                    .append(". Your birthday is " + birthday + ".")

                    .append("[Method: " + request.getMethod() + "]");

            PrintWriter out = response.getWriter();

            out.println(responseText);

            out.flush();

            out.close();

        }

        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

            doPost(request, response);

        }

    }

    Web.xml配置

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

    <web-app 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"

               version="2.5">

        <servlet>

            <servlet-name>GetAndPostExample</servlet-name>

            <servlet-class>org.yifeng.webapp.servlet.GetAndPostExample</servlet-class>

        </servlet>

        <servlet-mapping>

            <servlet-name>GetAndPostExample</servlet-name>

            <url-pattern>/GetAndPostExample</url-pattern>

        </servlet-mapping>

        <welcome-file-list>

            <welcome-file>getAndPostExample.html</welcome-file>

        </welcome-file-list>

    </web-app>

    如果以點擊“Send parameters using GET”按鈕,如下圖:

    如果以點擊“Send parameters using POST”按鈕,如下圖:

    也許你會疑問,為什么要在URL后面追加時間呢?

    有時瀏覽器會把多個XMLHttpRequest 請求的結果緩存在同一個URL.

    如果對每個請求的響應不同,這就會帶來不好的結果.

    把當前時間戳追加到 URL的最后,就能確保URL 的唯一性,從而避免瀏覽器緩存結果.

    * IE有這種緩存問題,但是Firefox沒有。你可以去試試,哈哈。

    AJAX XML 發(fā)送請求數據

    Ø 只是使用一個包含名/值對的簡單查詢串,這可能不夠健壯,

    Ø 不足以向服務器傳遞大量復雜的模型變化.

    Ø 可以應用XML

    Ø 如何向服務器發(fā)送XML ?

    Ø 可以把XML 作為請求體的一部分發(fā)送到服務器,

    Ø 這與POST 請求中將查詢串作為請求體的一部分進行發(fā)送異曲同工.

    Ø 服務器可以從請求體讀到XM L,并加以處理。

    Ø DEMO

    Ø postingXML.html

    DEMO AJAX XML 發(fā)送請求數據

    Ø 撰寫“postingXML.html”文件,如下:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

            "http://www.w3.org/TR/html4/loose.dtd">

    <html>

    <head>

        <title>Sending and XML Request</title>

        <script type="text/javascript">

            var xmlHttp;

            function createXMLHttpRequest() {

                if (window.ActiveXObject) {

                    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

                } else if (window.XMLHttpRequest) {

                    xmlHttp = new XMLHttpRequest();

                }

            }

            /**

             * 生成XML

             */

            function createXML() {

                var xml = "<pets>";

                var options = document.getElementById("petTypes").childNodes;

                var option = null;

                for (var i = 0; i < options.length; i++) {

                    option = options[i];

                    if (option.selected) {

                        xml = xml + "<type>" + option.value + "<"/type>";

                    }

                }

                xml = xml + "<"/pets>";

                return xml;

            }

            function sendPetTypes() {

                createXMLHttpRequest();

                var xml = createXML();

                var url = "PostingXMLExample?timeStamp=" + new Date().getTime();

                xmlHttp.open("POST", url, true);

                xmlHttp.onreadystatechange = handleStateChange;

                xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

                xmlHttp.send(xml);

            }

            function handleStateChange() {

                if (xmlHttp.readyState == 4) {

                    if (xmlHttp.status == 200) {

                        parseResults();

                    }

                }

            }

            function parseResults() {

                var responseDiv = document.getElementById("serverResponse");

                if (responseDiv.hasChildNodes()) {

                    responseDiv.removeChild(responseDiv.childNodes[0]);

                }

                var responseText = document.createTextNode(xmlHttp.responseText);

                responseDiv.appendChild(responseText);

            }

        </script>

    </head>

    <body>

    <h1>Select the types of pets in your home:</h1>

    <form action="#">

        <select id="petTypes" size="6" multiple="true">

            <option value="cats">Cats</option>

            <option value="dogs">Dogs</option>

            <option value="fish">Fish</option>

            <option value="birds">Birds</option>

            <option value="hamsters">Hamsters</option>

            <option value="rabbits">Rabbits</option>

        </select>

        <br/><br/>

        <input type="button" value="Submit Pets" onclick="sendPetTypes();"/>

    </form>

    <h2>Server Response:</h2>

    <div id="serverResponse"></div>

    </body>

    </html>

    Ø 撰寫“PostingXMLExample.java”文件,如下:

    package org.yifeng.webapp.servlet;

    import org.w3c.dom.Document;

    import org.w3c.dom.NodeList;

    import org.xml.sax.SAXException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    import javax.servlet.ServletException;

    import javax.xml.parsers.DocumentBuilderFactory;

    import javax.xml.parsers.ParserConfigurationException;

    import java.io.IOException;

    import java.io.BufferedReader;

    import java.io.ByteArrayInputStream;

    /**

     * Copyright:       晟軟科技

     * WebSit:         http://www.shengruan.com

     * Author:          憶風

     * QQ:              583305005

     * MSN:             YiFengs@msn.com

     * Email:           zhdqCN@gmail.com

     * CreationTime:    2008-8-25 23:30:41

     * Description:

     */

    public class PostingXMLExample extends HttpServlet {

        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

            String xml = readXMLFromRequestBody(request);//獲得XML字符串

            Document xmlDoc = null;

            try {

                xmlDoc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new ByteArrayInputStream(xml.getBytes()));

            } catch (SAXException e) {

                System.out.println("SAXException: " + e);

            } catch (ParserConfigurationException e) {

                System.out.println("ParserConfigurationException: " + e);

            }

            /**

             * JavaJavaScript均有W3C DOM的實現(xiàn),比如getElementByTagNamegetNodeValue方法

             */

            NodeList selectedPetTypes = xmlDoc.getElementsByTagName("type");

            String type = null;

            String responseText = "Selected Pets: ";

            for (int i = 0; i < selectedPetTypes.getLength(); i++) {

                type = selectedPetTypes.item(i).getFirstChild().getNodeValue();

                responseText = responseText + " " + type;

            }

            response.setContentType("text/xml");

            response.getWriter().print(responseText);

        }

        private String readXMLFromRequestBody(HttpServletRequest request) {

            StringBuilder xml = new StringBuilder();

            String line = null;

            try {

                BufferedReader reader = request.getReader();

                while ((line = reader.readLine()) != null) {

                    xml.append(line);

                }

            } catch (Exception e) {

                System.out.println("Error reading XML: " + e.toString());

            }

            return xml.toString();

        }

        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

            doPost(request, response);

        }

    }

    Ø 運行,顯示如下:





    作者:周大慶(zhoudaqing)
    網址:http://www.tkk7.com/yifeng
    >>>轉載請注明出處!<<<

    posted on 2008-08-26 02:47 憶風 閱讀(217) 評論(0)  編輯  收藏 所屬分類: Ajax
    主站蜘蛛池模板: 亚洲乱码卡一卡二卡三| 亚洲国产精品综合久久20| 在线播放高清国语自产拍免费 | 蜜臀98精品国产免费观看| 免费福利资源站在线视频| 亚洲国产成人无码av在线播放| 一二三四免费观看在线电影| 日本在线免费观看| 国产精品免费看久久久香蕉| 亚洲av午夜福利精品一区| 亚洲AV无码一区二区三区国产| 精品四虎免费观看国产高清午夜 | 成人片黄网站A毛片免费| 亚洲视频免费在线观看| 亚洲国产理论片在线播放| 亚洲人成无码网WWW| 一级毛片试看60分钟免费播放| 久久精品国产亚洲精品2020| 免费在线视频一区| 手机在线看永久av片免费| 丝瓜app免费下载网址进入ios| 亚洲精品一品区二品区三品区| 成**人免费一级毛片| 亚洲AV日韩AV无码污污网站| 亚洲av日韩片在线观看| 波多野结衣免费在线| 亚洲AV无码一区二区三区久久精品 | 日韩插啊免费视频在线观看| 亚洲午夜精品一区二区麻豆| 亚洲a级在线观看| 亚洲免费视频观看| 亚洲香蕉久久一区二区三区四区| 亚洲精品欧洲精品| 亚洲人成在线中文字幕| 亚洲一级免费视频| 国产91在线|亚洲| 亚洲av无码专区在线电影天堂| 激情无码亚洲一区二区三区| 香蕉视频在线观看免费| 国产yw855.c免费视频| 久久精品熟女亚洲av麻豆|