校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 零基礎學習AJAX之AJAX的簡介和基礎

零基礎學習AJAX之AJAX的簡介和基礎

熱門標簽:科智聯(lián)智能電銷機器人 徐州電銷卡外呼系統(tǒng)供應商 上海浦東百度地圖標注中心注冊 老虎郵局地圖標注點 外呼系統(tǒng)獲取客戶手機號 襄陽外呼系統(tǒng)接口 百靈鳥 目標三維地圖標注 青海醫(yī)療智能外呼系統(tǒng)怎么樣

本節(jié)簡介(異步鏈接服務器對象)XMLHTTPRequest以及AJAX的簡介。

AJAX即“Asynchronous Javascript And XML”(異步JavaScript和XML)。 AJAX有四個方面的好處:1.即減輕了服務器的負擔。2帶來了更好的用戶體驗。3.基于標準被廣泛的支持。4.擁有更好的頁面呈現(xiàn)和數(shù)據(jù)分離。

技術(shù)名稱 技術(shù)說明
javascript javascript是通用的腳本語言,AJAX是用javascript編寫的
css 用戶界面的樣式通過css來修改
DOM DOM通過javascript修改DOM,ajax可以在運行時改變用戶界面,或者局部更新頁面中的某個節(jié)點。
XMLHttpRequest XMLHttpRequest對象 XMLHttpRequest對象允許web程序員從web服務器以后臺的方式獲取數(shù)據(jù)。數(shù)據(jù)的個數(shù)通常是XML或者是文本。

從上面我們看出,javascript就想膠水一樣將各個部分粘貼在一起,例如通過javascript操作BOM改變刷新用戶界面,通過修改className來改變css樣式風格

1.異步對象連接服務器

不嚴謹?shù)恼f,ajax是一個簡單的多線程,它能夠是用戶在前臺多種操作而不間斷。ajax異步交互在后臺默默的工作著 在web中異步訪問是通過XMLHttpRequest對象來實現(xiàn)的,該對象最早是在ie5被作為activeX控件引入的。隨后各個瀏覽器紛紛支持該異步對象,首先必須創(chuàng)建對象。代碼如下:

復制代碼 代碼如下:

    var xmlHttp;
            function createXMLHrrpRequest() {
                if (window.ActiveXObject)
                    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
                else if (window.XMLHttpRequest)
                    xmlHttp = new XMLHttpRequest();
            }

該對象是先創(chuàng)建了一個全局變量xmlHttp,留以后函數(shù)中使用。另外創(chuàng)建異步對象函數(shù)createXMLHrrpRequest()

該過程用到了if語句方法,如果是IE采用window.ActiveXobject方法,如果不是,則用XMLHttpRequest方法創(chuàng)建函數(shù)。

 在創(chuàng)建完異步對象后,自然是使用該對象連接服務器,該對象有一系列十分有用的屬性和方法。

屬性/方法 說明
abort() 取消請求
getAllResponseHeaders() 獲取指定的Http頭
open(method,url) 創(chuàng)建請求,method指定請求類型,GET POST
send() 發(fā)送請求
setRequestHeader() 指定請求的http頭
onreadystatechange 發(fā)生任何狀態(tài)變化時的事件控制對象
readyState 

請求的狀態(tài)

0為尚未初始化

1為正在發(fā)送請求

2為請求完成

3為請求成功,正接收數(shù)據(jù)。

4為接收數(shù)據(jù)成功

responseText 服務器返回文本
responseXML 服務器返回xml
status 
服務器返回的http請求響應值,常用的有

200表示請求成功

202表示請求被接收,但處理未完成

400表示錯誤的請求

404表示資源未找到

500表示內(nèi)部服務器錯誤,如aspx代碼錯誤

創(chuàng)建完XMLHttpRequest對象后首先利用open()方法建立一個請求,并向服務器發(fā)送,該方法的完整表示式如下:

open(methond,url,asynchronous,user,password)
其中,method表示請求的類型,通長為GET,POST。

url即請求的地址,可以是絕對地址,也可以是相對地址。

asynchronous是一個布爾值,表示是否為異步請求,默認值為異步請求true。

user、password分別為可選的用戶名、密碼。

創(chuàng)建了異步對象后,要建立一個到服務器的請求可使用如下代碼:

xmlHttp.open("GET","1-1.aspx",true);
以上代碼用get方法請求的相對地址為9-1.aspx的頁面,方式是異步的。在發(fā)出了請求后便需要請求的狀態(tài)readyState屬性來判斷請求的情況,如果該屬性變化了,就會觸發(fā)onreadystatechange事件,因此通常的代碼如下:

復制代碼 代碼如下:

script type="text/javascript">
            xmlHttp.onRecorderStateChange = function(){
                if(xmlHttp.readyState == 4)
                //執(zhí)行相關代碼
            }
        /script>

也就是直接編寫onRecorderStateChange的事件函數(shù),如果readyState的狀態(tài)為4(數(shù)據(jù)接收成功)則繼續(xù)操作。但是通常情況下,不但需要判斷請求的狀態(tài),還要判斷服務器返回的狀態(tài)status,因此上述代碼改為

復制代碼 代碼如下:

script type="text/javascript">
            xmlHttp.onRecorderStateChange = function(){
                if(xmlHttp.readyState == 4 xmlHttp.status==200)
                //執(zhí)行相關代碼
            }
        /script>

以上兩段代碼僅僅只是建立了請求,還需要使用send()方法來發(fā)送請求,該方法的原型如下:

send(body);
改方法僅有一個參數(shù)body,它表示要向服務器發(fā)送的數(shù)據(jù),其格式為查詢字符串的形式,例如:

var body = "myName=isaacage=25";
如果再open中指定的是get方式,則這些參數(shù)作為查詢字符串提交,如果指定的是post方式,則作為HTTP的POST方法提交。對于send()而言。body參數(shù)是必須的,如果不發(fā)送任何數(shù)據(jù),則可以使用

xmlHttp.send(null)
特別的,如果使用POST方法進行提交請求,那么在發(fā)送之前必須使用以下語句來設置HTTP的頭,語法如下:

xmlHttp.setRequestHeader("content-Type","application/x-www-form-urlencoded;")
服務器在收到客戶端請求之后,根據(jù)請求返回相應的結(jié)果,這個結(jié)果通常為兩種形式,一種是文本形式,存儲在responseText中;另一種是XML格式,存儲在responseXML中。客戶端程序可以對前者進行字符串的處理,對后者進行DOM相關的處理,例如可以對服務器返回值做如下的處理:

alert("服務器返回:"+xmlHttp.responseText);
上述整個異步連接服務器的過程如下:

復制代碼 代碼如下:

    body>
        script type="text/javascript">
            var xmlHttp;
            function createXMLHttpRequest() {
                if (window.ActiveXObject)
                    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
                else if (window.XMLHttpRequest)
                    xmlHttp = new XMLHttpRequest();
            }
            function startRequest() {
                createXMLHttpRequest();
                xmlHttp.open("GET", "http://study.ahthw.com/ajaxresponse/1-1.aspx", true);
                xmlHttp.onreadystatechange = function() {
                    if (xmlHttp.readyState == 4 xmlHttp.status == 200)
                        alert("服務器返回: " + xmlHttp.responseText);
                }
                xmlHttp.send(null);
            }
        /script>
        input type="button" value="測試異步通訊" onClick="startRequest()">
    /body>

為了解決異步連接ie緩存問題,需要在真實地址加一個與時間毫秒相關的參數(shù),使得每次請求的地址都不一樣。而該參數(shù)服務器確是不需要的。

復制代碼 代碼如下:

var sUrl = "1-1.aspx?"+new Date().getTime();//地址不斷變化
        XMLHttp.open("GET",sUrl,true);

2.GET和POST模式

上面的實例中,除了請求異步服務器以外,并沒有向服務器發(fā)送額外的數(shù)據(jù),通常在html請求中有g(shù)et和post模式,這兩種模式都可以作為異步請求發(fā)送數(shù)據(jù)的方式。

如果是GET請求,則直接把數(shù)據(jù)放入異步請求的URL地址中,而send方法不發(fā)送任何數(shù)據(jù),例如:

復制代碼 代碼如下:

    var queryString = "firstName=isaacbirthday=0226";
            var sUrl = "1-1.aspx?" + queryString + "timestamp" + new Date().getTime();
            xmlHttp.open("GET", sUrl);
            xmlHttp.send(null); //該語句只發(fā)送null

如果是POST模式,則是把數(shù)據(jù)統(tǒng)一在send()方法中送出,請求地址沒有任何信息,并且必須設置請求的文件頭,例如:

復制代碼 代碼如下:

script language="javascript">
            var queryString = "firstName=isaacbirthday=0226";
            var sUrl = "1-1.aspx?" + queryString + "timestamp" + new Date().getTime();
            xmlHttp.open("POST", sUrl);
            xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
            xmlHttp.send(queryString); //該語句負責發(fā)送數(shù)據(jù)
        /script>

實例

為了更清楚地演示GET和POST的區(qū)別,編寫示例代碼,首先創(chuàng)建兩個文本框用于輸入用戶姓名和生日,并建立兩個按鈕分別用于GET和POST兩個方法來發(fā)送異步請求

復制代碼 代碼如下:

form>
            p>input type="text" id="firstName"/>/p>
            p>input type="text" id="birthday" />/p>
        /form>
        input type="button" value="GET" onClick="doRequestUsingGET()">
        input type="button" value="POST" onClick="doRequestUsingPOST()">

其中用戶填寫的數(shù)據(jù)統(tǒng)一用函數(shù)createQueryString()編寫,需要時予以調(diào)運,代碼如下

復制代碼 代碼如下:

function crrateQueryString() {
                var firstName = document.getElementById("firstName").value;
                var birthday = document.getElementById("birthday").value;
                var queryString = "firstName=" + firstName + "birthday=" + birthday;
                return queryString;
            }

服務器接收到請求數(shù)據(jù)后根據(jù)不同的時刻返回相應的文本,客戶端接收到文本后顯示在相應的div快中,代碼如下

復制代碼 代碼如下:

    function handleStateChange() {
                if (xmlHttp.readyState == 4 xmlHttp.state == 200) {
                    var responseDiv = document.getElementById("serverResponse");
                    responseDiv.innerHTML = xmlHttp.responseText;
                }
            }

GET和POST各建立自己的函數(shù)doRequestUsingGET()和doRequestUsingPOST()。

完整代碼如下:

復制代碼 代碼如下:

script type="text/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 birthday = document.getElementById("birthday").value;
                var queryString = "firstName=" + firstName + "birthday=" + birthday;
                return encodeURI(encodeURI(queryString)); //兩次編碼解決中文亂碼問題
            }
            function doRequestUsingGET() {
                createXMLHttpRequest();
                var queryString = "1-3.aspx?";
                queryString += createQueryString() + "timestamp=" + new Date().getTime();
                xmlHttp.onreadystatechange = handleStateChange;
                xmlHttp.open("GET", queryString);
                xmlHttp.send(null);
            }
            function doRequestUsingPOST() {
                createXMLHttpRequest();
                var url = "1-3.aspx?timestamp=" + new Date().getTime();
                var queryString = createQueryString();
                xmlHttp.open("POST", url);
                xmlHttp.onreadystatechange = handleStateChange;
                xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
                xmlHttp.send(queryString);
            }
            function handleStateChange() {
                if (xmlHttp.readyState == 4 xmlHttp.status == 200) {
                    var responseDiv = document.getElementById("serverResponse");
                    responseDiv.innerHTML = decodeURI(xmlHttp.responseText); //解碼
                }
            }
        /script>
        form>
            input type="text" id="firstName" />
            br>
            input type="text" id="birthday" />
        /form>
        form>
            input type="button" value="GET" onclick="doRequestUsingGET();" />
            br>
            input type="button" value="POST" onclick="doRequestUsingPOST();" />
        /form>
        div id="serverResponse">/div>

服務器端主要是根據(jù)用戶輸入以及請求的類型返回不同的字符串

復制代碼 代碼如下:

%@ Page Language="C#" ContentType="text/html" ResponseEncoding="gb2312" %>
%@ Import Namespace="System.Data" %>
%
    if(Request.HttpMethod == "POST")
        Response.Write("POST: " + Request["firstName"] + ", your birthday is " + Request["birthday"]);
    else if(Request.HttpMethod == "GET")
        Response.Write("GET: " + Request["firstName"] + ", your birthday is " + Request["birthday"]);
%>

從以上代碼看出POST和GET都發(fā)送了數(shù)據(jù)異步請求,通常在數(shù)據(jù)不多的時候使用GET,在數(shù)據(jù)較多的時候使用POST。

在使用PSOT發(fā)送中文字符時,post接收會亂碼,使用GET發(fā)送中文字符正常。這是因為異步對象xmlHttp在處理返回的responseText的時候,是按照UTF-8編碼的。
通常的解決辦法是escape()對發(fā)送的數(shù)據(jù)進行編碼,然后在返回的responseText再使用unescape()進行解碼。然而在javascript編程中通常不推薦escape()和unescape()。而推薦使用encodeURI()和decodeURI()。這里要正常運行,必須對發(fā)送的數(shù)據(jù)進行兩次encodeURI()編碼。
代碼如下

復制代碼 代碼如下:

    function createQueryString(){
        var firstName =document.getElementById("firstName").value;
        var birthday =document.getElementById("birthday").value;
        var queryString = "firstName="+firstName +"birthday="+birthday;
        return encodeURI(encodeURI(queryString)); //兩次編碼解決中文亂碼問題
    }

而且在返回數(shù)據(jù)responeText時再進行一次解碼,代碼如下

復制代碼 代碼如下:

function handleStateChange(){
            if(xmlHttp.readyState==4xmlHttp.status ==200){
                var responeDiv =document.getElementById(serverResponse);
                responeDiv.innerHTML = decodeURI(XMLHttp.responseText);//編碼
            }
        }

這樣POST模式下也能使用中文了。

3.服務器返回xml

XML是一種可擴展標記語言(Extensible Markup Language),它是一種可自定義標記的語言,用來克服html局限,按照實際功能來看,xml主要用于數(shù)據(jù)存儲。

在ajax中,服務器如果返回XML,可通過異步對象的responseXML屬性來獲取,開發(fā)者可以利用DOM的作用方法進行處理。

假設服務器返回

復制代碼 代碼如下:

?xml version="1.0" encoding="gb2312"?>
list>
    caption>Member List/caption>
    member>
        name>isaac/name>
        class>W13/class>
        birth>Jun 24th/birth>
        constell>Cancer/constell>
        mobile>1118159/mobile>
    /member>
    member>
        name>fresheggs/name>
        class>W610/class>
        birth>Nov 5th/birth>
        constell>Scorpio/constell>
        mobile>1038818/mobile>
    /member>
    member>
        name>girlwing/name>
        class>W210/class>
        birth>Sep 16th/birth>
        constell>Virgo/constell>
        mobile>1307994/mobile>
    /member>
    member>
        name>tastestory/name>
        class>W15/class>
        birth>Nov 29th/birth>
        constell>Sagittarius/constell>
        mobile>1095245/mobile>
    /member>
    member>
        name>lovehate/name>
        class>W47/class>
        birth>Sep 5th/birth>
        constell>Virgo/constell>
        mobile>6098017/mobile>
    /member>
    member>
        name>slepox/name>
        class>W19/class>
        birth>Nov 18th/birth>
        constell>Scorpio/constell>
        mobile>0658635/mobile>
    /member>
    member>
        name>smartlau/name>
        class>W19/class>
        birth>Dec 30th/birth>
        constell>Capricorn/constell>
        mobile>0006621/mobile>
    /member>
    member>
        name>tuonene/name>
        class>W210/class>
        birth>Nov 26th/birth>
        constell>Sagittarius/constell>
        mobile>0091704/mobile>
    /member>
    member>
        name>dovecho/name>
        class>W19/class>
        birth>Dec 9th/birth>
        constell>Sagittarius/constell>
        mobile>1892013/mobile>
    /member>
    member>
        name>shanghen/name>
        class>W42/class>
        birth>May 24th/birth>
        constell>Gemini/constell>
        mobile>1544254/mobile>
    /member>
    member>
        name>venessawj/name>
        class>W45/class>
        birth>Apr 1st/birth>
        constell>Aries/constell>
        mobile>1523753/mobile>
    /member>
    member>
        name>lightyear/name>
        class>W311/class>
        birth>Mar 23th/birth>
        constell>Aries/constell>
        mobile>1002908/mobile>
    /member>
/list>

下面利用異步對象獲取該XML,并將所有的項都羅列在表格中,初始化對象的方法與獲取文本完全相同,代碼如下:

復制代碼 代碼如下:

    var xmlHttp;

            function createXMLHttpRequest() {
                if (window.ActiveXObject)
                    xmlHttp = new ActiveXObject("Mincrosoft,XMLHttp");
                else if (window.XMLHttpRequest)
                    xmlHttp = new XMLHttpRequest();
            }

當用戶單擊按鈕時發(fā)生異步請求,并獲取responseXML對象,代碼如下

復制代碼 代碼如下:

    function getXML(addressXML) {
                var sUrl = addressXML + "?timestamp=" + new Date();
                createXMLHttpRequest();
                xmlHttp.onRecorderStateChange = handleStateChange;
                xmlHttp.open("GET", url);
                xml.send(null);
            }

            function handleStateChange() {
                if (xmHttp, readyState == 4 xmlHttp.status == 200)
                DrawTable(xmlHttp.responseXML); //responseXML獲取到xml文檔
            }

其中DrawTable()為后勤處理XML的函數(shù),將服務器返回的XML對象responseXML直接作為參數(shù)傳遞,HTML部分如下:

復制代碼 代碼如下:

    input type="button" value="獲取XML" onclick="getXML('1-4.xml');">br>br>
table class="datalist" summary="list of members in EE Studay" id="member">
    tr>
        th scope="col">Name/th>
        th scope="col">Class/th>
        th scope="col">Birthday/th>
        th scope="col">Constellation/th>
        th scope="col">Mobile/th>
    /tr>
/table>

當用戶單擊按鈕時出發(fā)getXML(),并將xml地址1-4.xml作為參數(shù)傳入

而函數(shù)DrawTable()的任務就是把XML中的數(shù)據(jù)拆分,并重新組裝到表格"member"中,代碼如下:可以看到處理XML的方法與DOM處理HTML完全相同

復制代碼 代碼如下:

    function DrawTable(myXML) {
                //用DOM方法操作XML文檔
                var oMembers = myXML.getElementsByTagName("member");
                var oMember = "",
                    sName = "",
                    sClass = "",
                    sBirth = "",
                    sConstell = "",
                    sMobile = "";
                for (var i = 0; i oMembers.length; i++) {
                    oMember = oMembers[i];
                    sName = oMember.getElementsByTagName("name")[0].firstChild.nodeValue;
                    sClass = oMember.getElementsByTagName("class")[0].firstChild.nodeValue;
                    sBirth = oMember.getElementsByTagName("birth")[0].firstChild.nodeValue;
                    sConstell = oMember.getElementsByTagName("constell")[0].firstChild.nodeValue;
                    sMobile = oMember.getElementsByTagName("mobile")[0].firstChild.nodeValue;
                    //添加一行
                    addTableRow(sName, sClass, sBirth, sConstell, sMobile);
                }
            }

其中addTableRow()函數(shù)將拆分出來的每一組XML數(shù)據(jù)組裝成表格table>的一行,添加到頁面中。代碼如下:

復制代碼 代碼如下:

    function addTableRow(sName, sClass, sBirth, sConstell, sMobile) {
                //表格添加一行的相關操作
                var oTable = document.getElementById("member");
                var oTr = oTable.insertRow(oTable.rows.length);
                var aText = new Array();
                aText[0] = document.createTextNode(sName);
                aText[1] = document.createTextNode(sClass);
                aText[2] = document.createTextNode(sBirth);
                aText[3] = document.createTextNode(sConstell);
                aText[4] = document.createTextNode(sMobile);
                for (var i = 0; i aText.length; i++) {
                    var oTd = oTr.insertCell(i);
                    oTd.appendChild(aText[i]);
                }
            }

網(wǎng)站中實際返回xml的工作通常是由asp.net jsp php等服務器腳本動態(tài)生成的,換句話說,xmlHttp.open()中的URL地址仍然.aspx等動態(tài)頁面的后綴,它們返回的XML是用戶請求生成的。


4.處理多個異步請求

而實際頁面中往往不止一個異步請求,比如在一個表單中,很多單元格都需要發(fā)生異步請求來驗證,再加上網(wǎng)速的影響,第一個異步請求尚未完成,很可能就已經(jīng)被第2個請求覆蓋。

頁面內(nèi)容不做多介紹,我們發(fā)現(xiàn),發(fā)送的第一個請求沒有響應,因為它被第二個請求覆蓋了。

通常解決的辦法是將xmlHttp對象作為局部變量來處理,并且在收到服務器返回值后手動將其刪除。如下所示:

復制代碼 代碼如下:

        function getData(oServer, oText, oSpan) {
                var xmlHttp; //處理為局部變量
                if (window.ActiveXObject)
                    xmlHttp = new ActiveXObject("Microsoft.XMLHttp");
                else if (window.XMLHttpRequest)
                    xmlHttp = new XMLHttpRequest();
                var queryString = oServer + "?";
                queryString += createQueryString(oText) + "timestamp=" + new Date().getTime();
                xmlHttp.onreadystatechange = function() {
                    if (xmlHttp.readyState == 4 xmlHttp.status == 200) {
                        var responseSpan = document.getElementById(oSpan);
                        responseSpan.innerHTML = xmlHttp.responseText;
                        delete xmlHttp; //收到返回結(jié)構(gòu)后手動刪除
                        xmlHttp = null;
                    }
                }
                xmlHttp.open("GET", queryString);
                xmlHttp.send(null);
            }

以上就是本文的全部內(nèi)容了,雖然有點長,但是還是希望小伙伴們能夠好好的讀一讀,這對于學好ajax非常重要,希望大家能夠喜歡。

您可能感興趣的文章:
  • Javascript 基礎---Ajax入門必看
  • 使用jQuery處理AJAX請求的基礎學習教程
  • Jquery ajax基礎教程
  • ajax跨域(基礎域名相同)表單提交的方法
  • JQuery的ajax基礎上的超強GridView展示
  • ajax 入門基礎之 XMLHttpRequest對象總結(jié)
  • Ajax+PHP簡單基礎入門實例教程
  • AJAX技術(shù)基礎介紹
  • Ajax.基礎教程 電子書版 提供下載
  • Ajax基礎知識詳解

標簽:紅河 股票 辛集 佛山 商洛 咸寧 揭陽 荊州

巨人網(wǎng)絡通訊聲明:本文標題《零基礎學習AJAX之AJAX的簡介和基礎》,本文關鍵詞  零,基礎,學習,AJAX,之,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權(quán)與本站無關。
  • 相關文章
  • 下面列出與本文章《零基礎學習AJAX之AJAX的簡介和基礎》相關的同類信息!
  • 本頁收集關于零基礎學習AJAX之AJAX的簡介和基礎的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    欧美mv日韩mv国产网站| 亚洲人成网站色在线观看| 一本久久a久久精品亚洲| 日韩一区二区三区高清免费看看| 成人性生交大片免费看视频在线 | 亚洲欧美另类久久久精品2019| 精品成人a区在线观看| 精品欧美一区二区在线观看| 精品日产卡一卡二卡麻豆| 日韩一区二区三区免费看| 亚洲精品一线二线三线| 久久精品人人做人人爽人人| 久久久精品一品道一区| 国产精品丝袜在线| 一区二区三区在线视频免费| 亚洲午夜一区二区三区| 日韩在线卡一卡二| 国产在线视频不卡二| 成人午夜伦理影院| 欧美在线999| 日韩一级黄色片| 国产精品午夜在线| 亚洲线精品一区二区三区八戒| 日韩精品五月天| 国产成人欧美日韩在线电影| 91视频在线观看| 91精品国产综合久久小美女| 久久久蜜臀国产一区二区| 亚洲另类色综合网站| 日本欧美加勒比视频| 成人蜜臀av电影| 91精品黄色片免费大全| 国产精品色呦呦| 天天色 色综合| 成人av手机在线观看| 欧美日高清视频| 欧美经典一区二区| 日本亚洲欧美天堂免费| 成人视屏免费看| 日韩一级免费一区| 亚洲中国最大av网站| 久久99精品视频| 欧美性欧美巨大黑白大战| 久久女同精品一区二区| 婷婷成人综合网| www.欧美日韩| 亚洲精品在线三区| 丝瓜av网站精品一区二区| aa级大片欧美| 久久一区二区三区四区| 丝袜亚洲另类欧美| 一本一道综合狠狠老| 国产欧美日韩卡一| 经典三级一区二区| 欧美军同video69gay| 一区二区三区四区不卡在线 | 国产永久精品大片wwwapp| 欧洲亚洲国产日韩| 亚洲青青青在线视频| 国产成人午夜视频| xf在线a精品一区二区视频网站| 亚洲午夜在线视频| 欧美色老头old∨ideo| 综合av第一页| eeuss鲁片一区二区三区| 精品久久久久久久久久久久久久久久久| 欧美天堂一区二区三区| 中文字幕中文字幕在线一区 | 国产欧美一区二区精品秋霞影院| 日韩精品欧美精品| 欧美日韩另类一区| 视频一区在线视频| 欧美一区永久视频免费观看| 亚洲国产三级在线| 欧美日韩国产成人在线91| 亚洲国产日日夜夜| 3d动漫精品啪啪一区二区竹菊 | 成人听书哪个软件好| 久久先锋资源网| 国产精品99久久久久久有的能看| 欧美精品一区二区三区蜜桃| 久久精品国产77777蜜臀| 欧美大度的电影原声| 韩国精品一区二区| 欧美激情综合在线| 色综合久久天天| 亚洲亚洲人成综合网络| 制服丝袜亚洲精品中文字幕| 热久久久久久久| 久久蜜桃av一区精品变态类天堂| 国产剧情av麻豆香蕉精品| 中文字幕不卡在线播放| 99r国产精品| 亚洲国产色一区| 精品国产一区二区三区四区四| 狠狠色综合播放一区二区| 中文字幕av一区 二区| 91福利小视频| 日本伊人精品一区二区三区观看方式| 精品少妇一区二区三区日产乱码| 国产电影一区在线| 亚洲综合色在线| 欧美一区二区福利视频| 国产ts人妖一区二区| 亚洲综合免费观看高清在线观看| 欧美一级搡bbbb搡bbbb| 国产成人在线视频免费播放| 伊人性伊人情综合网| 精品乱码亚洲一区二区不卡| 成人av片在线观看| 六月丁香综合在线视频| 亚洲人成小说网站色在线| 日韩欧美一级片| 色婷婷一区二区| 国产九九视频一区二区三区| 亚洲一区二区影院| 久久久精品2019中文字幕之3| 在线视频国产一区| 精品综合免费视频观看| 亚洲人一二三区| 久久久久久久久久久黄色| 欧美系列日韩一区| 成人黄色片在线观看| 免费成人av在线| 一区二区三区免费在线观看| 国产亚洲一区二区三区四区| 欧美伦理影视网| 91亚洲精品久久久蜜桃网站| 精品一区二区三区在线视频| 亚洲成人动漫精品| 亚洲色图欧洲色图婷婷| 久久久国产午夜精品| 日韩一二在线观看| 欧美日韩中文字幕一区| 99re66热这里只有精品3直播 | 久久综合九色综合97婷婷| 欧美视频在线观看一区| 成人app下载| 国产白丝精品91爽爽久久 | 精品88久久久久88久久久| 欧美日韩高清一区| 91国偷自产一区二区开放时间 | 亚洲制服丝袜av| 国产精品的网站| 亚洲国产岛国毛片在线| 久久久一区二区| 久久久久久夜精品精品免费| 欧美xxxxx裸体时装秀| 日韩欧美一区二区免费| 日韩区在线观看| 日韩亚洲欧美一区二区三区| 在线不卡一区二区| 欧美电影一区二区| 91精品综合久久久久久| 欧美军同video69gay| 欧美一卡二卡在线| 日韩午夜激情电影| 欧美精品一区在线观看| 国产视频一区二区在线观看| 国产丝袜欧美中文另类| 自拍偷拍欧美精品| 亚洲激情图片qvod| 亚洲一二三级电影| 免费高清在线一区| 国产一区美女在线| 成人91在线观看| 91福利精品第一导航| 精品视频在线看| 日韩欧美国产一区二区三区| 精品国产免费视频| 国产精品天美传媒沈樵| 怡红院av一区二区三区| 丝袜亚洲精品中文字幕一区| 久久99精品国产麻豆婷婷| 高清免费成人av| 91精品办公室少妇高潮对白| 日韩一级精品视频在线观看| 久久久久久久久伊人| 一区二区三区中文字幕在线观看| 五月综合激情婷婷六月色窝| 毛片av一区二区| 97超碰欧美中文字幕| 欧美日韩国产123区| 国产亚洲一本大道中文在线| 亚洲三级在线观看| 久久精品国产999大香线蕉| av不卡免费电影| 欧美成va人片在线观看| 国产精品成人一区二区艾草| 水野朝阳av一区二区三区| 成人一区二区三区视频在线观看 | 久久这里只有精品6| 亚洲人成小说网站色在线| 激情综合网av| 欧美性xxxxx极品少妇| 欧美激情一区二区三区| 图片区小说区区亚洲影院| av一区二区不卡| 精品国产伦一区二区三区观看体验 | 精品国产一区二区三区久久影院 |