精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

探索AJAX中的消息傳輸模式 (上)

開發 前端
在我們使用AJAX的應用中,消息傳輸有那些方式呢?純文本、帶HTML的文本、XML、JSON?還有哪些呢?在許多情況下,純文本的消息傳輸就足夠了。又比如復雜點的數據信息,表格、對象或者是其它的,這樣我們可以使用XML或是JSON來格式化數據后進行傳輸。本文中將就AJAX中的消息傳輸模式進行探索研究。

相關文章:探索AJAX中的消息傳輸模式 (下)

有這樣一個AJAX的應用場合,提供一系列的標簽連接,讓用戶任意選擇,瀏覽器向服務器發送請求查詢得到想要的數據信息。下面就以這個應用討論下消息傳輸。

一、普通的文本消息傳輸

建立一ASP.NET AJAX應用程序,先為AJAXMessageText.aspx頁面做好簡單的布局準備,我們采用HyperLink控件做為導航連接,放置在一個table里,并設置一單元格作為數據顯示區,設置其作為服務器控件運行(runat="server"),如下圖示:

各個控件的命名以數據顯示區的名稱如下:

<asp:HyperLink ID="hlAjax" runat="server" Text="AJAX" NavigateUrl="Java
Script:void(0);" /> <asp:HyperLink ID="hlAspnet" runat="server" Text="ASP.NET" NavigateUrl="Java
Script:void(0);" /> <asp:HyperLink ID="hlCastle" runat="server" Text="Castle" NavigateUrl="Java
Script:void(0);" /> <asp:HyperLink ID="hlService" runat="server" Text="WebService" NavigateUrl="Java
Script:void(0);" /> <asp:HyperLink ID="hlHtml" runat="server" Text="Html" NavigateUrl="JavaScript:void(0);"/> <td runat="server" colspan="2" rowspan="5" style="background-color: #00ffff; te
xt-align: left" valign="top" id="resultText">

用戶通過點擊HyperLink控件,客戶端向服務器發送請求,返回的數據可能來自不同的地方(數據庫,XML,普通的文件.....),這里以Message類來封裝這些數據,詳細代碼定義如下:

 /// <summary>
 /// Message 的摘要說明
 /// </summary>
 public class Message
 {
     public  string AJAX=string.Empty;
     public  string ASPNET=string.Empty;
     public  string CASTLE=string.Empty;
     public  string WEBSERVICE=string.Empty;
    public string HTML = string.Empty; 

    StringBuilder str = null;

    public Message()    
{
        str = new StringBuilder();
        str.Append("Ajax提供與服務器異步通信的能力,從而使用戶從請求/響應的循環中解脫出來。");
        str.Append("借助于Ajax,可以在用戶單擊按鈕時,使用JavaScript和DHTML立即更新UI,");
        str.Append(" 并向服務器發出異步請求,以執行更新或查詢數據庫。");
      AJAX = str.ToString();


        str = new StringBuilder();
        str.Append("Microsoft 的 ASP.NET 和 Visual Studio 組將出席于曼德勒海灣度假舉行的 ASP.NET Connections 會議。");
        str.Append("請參加深入而前沿的 ASP.NET、Visual Studio & .NET、SQL 和 Mobile Connections 交流會并同與會的");
        str.Append("Microsoft 和業界專家會晤。即時了解 Microsoft 許多令人驚喜的公告。");
        ASPNET = str.ToString();

        str = new StringBuilder();
        str.Append("Castle是針對.NET平臺的一個開源項目,從數據訪問框架ORM到IOC容器,再到WEB層的MVC框架、AOP,");
        str.Append("基本包括了整個開發過程中的所有東西,為我們快速的構建企業級的應用程序提供了很好的服務。");
        CASTLE = str.ToString();


        str = new StringBuilder();
        str.Append("Web Service 是在 Internet 上進行分布式計算的基本構造塊,是組件對象技術在 Internet 中的延伸,");
        str.Append("是一種部署在 Web 上的組件。它融合了以組件為基礎的開發模式和 Web 的出色性能。");
        WEBSERVICE = str.ToString();

        str = new StringBuilder();
        str.Append("<span style="+"font-weight:bold;font-size:20;color:Red;>");
        str.Append("帶有HTML的字符串,返回此字符串,所擁有的樣式等都可以得到解析!");
        str.Append("</span>");
        HTML = str.ToString();
    }
}

在ASP.NET AJAX應用中,客戶端和服務器端進行數據通信絕大多數都是通過WebService來完成,這里我們為Message所類的數據方便了與客戶端交互提供一個WebService:

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]
public class MessageWebService : System.Web.Services.WebService {

    public MessageWebService () { }

    [WebMethod]
    public string GetMessage(string text)
    {
        Message message = new Message();
        string str = string.Empty;
        switch (text)
        {
            case "AJAX": str = message.AJAX; break;
            case "ASPNET": str = message.ASPNET; break;
            case "CASTLE": str = message.CASTLE; break;
            case "SERVER": str = message.WEBSERVICE; break;
            case "HTML": str = message.HTML; break;
        }
        return str;
    }
}

方法GetMessage提供根據客戶端傳遞過來的參數返回Message類里所封裝的相應數據。此時,我們就應該著手客戶端請求的發送處理,在ASP.NET AJAX應用里,我們可以很方便的通過ScriptManager引入WebService:

<asp:ScriptManager ID="ScriptManager1" runat="server">
<Services>
<asp:ServiceReference Path="MessageWebService.asmx" />
</Services>
</asp:ScriptManager>

在客戶端,通過ASP.NET AJAX對JavaScript的擴展,我們可以很方便的得到各個控件的引用,以及調用WebService方法,設置回調函數來處理返回值,下面是客戶端JS的完整代碼:

<script type="text/javascript">
     var hlAjax;
     var hlAspnet;
     var hlCastle;
     var hlService;
     var hlHtml;
     var resultText;
     
     //初始化控件引用及事件
     function pageLoad()
     {
        hlAjax = $get("<% =hlAjax.ClientID %>");
        hlAspnet = $get("<% =hlAspnet.ClientID %>");
        hlCastle = $get("<% =hlCastle.ClientID %>");
        hlService = $get("<% =hlService.ClientID %>")
        hlHtml = $get("<% = hlHtml.ClientID %>");
        
        $addHandler(hlAjax,"click",onClick);
        $addHandler(hlAspnet,"click",onClick);
        $addHandler(hlCastle,"click",onClick);
        $addHandler(hlService,"click",onClick);
        $addHandler(hlHtml,"click",onClick);
        
        resultText = $get("<% = resultText.ClientID %>");
     }
     
     function onClick(eventElement)
     {
        var topic = false;
        switch(eventElement.target.id)
        {
           case hlAjax.id:topic = "AJAX";break;
           case hlAspnet.id:topic = "ASPNET";break;
           case hlCastle.id:topic = "CASTLE";break;
           case hlService.id:topic = "SERVER";break;
           case hlHtml.id:topic = "HTML";break;
           
        }
        //引用WebService獲取數據
        MessageWebService.GetMessage(topic,onGetTextMessageCallback);
     }
     
     //回調函數
     function onGetTextMessageCallback(text)
     {
        resultText.innerHTML=text;
     }
     </script>

上述中,通過AJAX所提供的$get()方法獲取到各控件的客戶端引用,并通過$addHandler()方法為其添加了客戶端事件,注意有個HTML的連接,這里我們追逐到Message類里:

str = new StringBuilder();
str.Append("<span style="+"font-weight:bold;font-size:20;color:Red;>");
str.Append("帶有HTML的字符串,返回此字符串,所擁有的樣式等都可以得到解析!");
str.Append("</span>");
HTML = str.ToString();

類里所封裝的html對應的字符傳是帶有css樣式及html標識的字符串,返回這個html字符串那客戶端是否能得到解析??答案是肯定的,這里只是做到了用戶點擊相應的連接就發送請求到服務器,要使這個應用完善,我們還得為這個應用初始化一個顯示值:

public partial class AjaxMessageText : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        this.resultText.InnerHtml = new Message().AJAX;
    }
}

看看下面的運行結果:

#p#

二、復雜類型的消息傳輸

我們模擬一個數據庫查詢功能,根據客戶端的請求條件查詢數據庫,把查詢到的數據返回到客戶端顯示。這樣一個應用一般來說可以通過XML來傳輸。ASPX頁面設計如下:

正如上圖所示,以MSSQL2000里的Northwind數據庫里的Employees表為例,根據客戶端的條件(排序字段,提取的記錄條數)查詢數據庫,下面是數據庫訪問代碼:

public class DataAccess
{
    private static string strCon = "Data Source=.;database=northwind;uid=sa;pwd=;";
    public DataAccess()
    {
    }

    public static DataTable GetEmployees(string orderBy, int maxRows)
    {
        string cmdText = "select top " + maxRows;
        cmdText += " EmployeeID,LastName,City,Country ";
        cmdText += "from Employees order by " + orderBy;
        return Exce(cmdText);
    }

    private static DataTable Exce(string cmdText)
    {
        SqlConnection conn = new SqlConnection(strCon);
        SqlDataAdapter sda = new SqlDataAdapter(cmdText, conn);
        DataSet ds = new DataSet();
        sda.Fill(ds);
        return ds.Tables[0];
    }
}


數據庫訪問方法GetEmployees提供根據客戶傳遞的參數查詢Employees表里的數據并以DataTable的形式返回,到這里我們同上面一樣可以借助WebService來處理返回的DataTable,將數據處理為一個XML字符串返回到客戶端:

[WebMethod]
public string GetEmployees(string orderBy, int manxRows)
{
    DataTable dt = DataAccess.GetEmployees(orderBy, manxRows);
    StringBuilder xml = new StringBuilder();
    xml.Append("<?xml version='1.0' ?>");
    xml.Append("<Employees>");

    foreach (DataRow row in dt.Rows)
    {
        string id = row["EmployeeID"].ToString();
        string name = row["LastName"].ToString();
        string city = row["City"].ToString();
        string country = row["Country"].ToString();
        xml.Append("<Employee>");
        xml.Append("<EmployeeID>" + id + "</EmployeeID>");
        xml.Append("<LastName>" + name + "</LastName>");
        xml.Append("<City>" + city + "</City>");
        xml.Append("<Country>" + country + "</Country>");
        xml.Append("</Employee>");
    }
    xml.Append("</Employees>");
    return xml.ToString();
}

在客戶端的處理程序上,大致和上面的普通的文本消息差不多,其實整個AJAX應用基本上都是應用的一個模式,從發送請求--->響應請求--->數據傳輸--->處理回調。客戶端工作量最大的就是在回調函數里,下面是本示例的回調函數定義:

//回調函數
function onXmlMessageCallback(result)
{
   var xml;
   if(window.ActiveXObject)  //IE
   {
       xml = new ActiveXObject("Microsoft.XMLDOM");
       xml.async = false;
       xml.loadXML(result);
   }
   else
   {
       var parser = new DOMParser();
       xml = parser.parseFromString(result,"text/xml");
   }
   
   var employees = xml.getElementsByTagName("Employee");
   var html = new Sys.StringBuilder();
   html.append("<table width='500px' cellspacing='1' cellpadding='0' border='0' bgcolor='#999999'>");
   //構建表頭
   html.append("<tr>");
   if(cbID.checked)
      html.append("<td bgcolor='lightblue'><b>ID</b></td>");
   if(cbLastName.checked)
      html.append("<td bgcolor='lightblue'><b>LastName</b></td>"); 
   if(cbCity.checked)
      html.append("<td bgcolor='lightblue'><b>City</b></td>"); 
   if(cbCountry.checked)
      html.append("<td bgcolor='lightblue'><b>Country</b></td>");
   html.append("<tr>");
   
   //構建數據行
   for (var i=0; i<employees.length;i++)
   {
       html.append("<tr>");
       if(cbID.checked)
       {
           var id= employees[i].getElementsByTagName("EmployeeID")[0].childNodes[0].nodeValue;
           html.append("<td>"+id+"</td>");
       }
       if(cbLastName.checked)
       {
           var LastName= employees[i].getElementsByTagName("LastName")[0].childNodes[0].nodeValue;
           html.append("<td>"+LastName+"</td>");
       }
       if(cbCity.checked)
       {
           var City= employees[i].getElementsByTagName("City")[0].childNodes[0].nodeValue;
           html.append("<td>"+City+"</td>");
       }
       if(cbCountry.checked)
       {
           var Country= employees[i].getElementsByTagName("Country")[0].childNodes[0].nodeValue;
           html.append("<td>"+Country+"</td>");
       }
       html.append("</tr>");
   }
   
   html.append("</table>");
   resultXml.innerHTML=html.toString();
}

在客戶端的回調函數里,把服務器端返回的字符串解析為一個xml對象,通過JavaScript操作DOM將xml對象里的每一條數據解析后存入數組,隨后根據頁面上選擇要顯示字段動態構造html代碼并顯示在指定的位置(resutlXml)。 下面是客戶端的完整代碼:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="AjaxMessageXML.aspx.cs" Inherits="AjaxMessageXML" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>無標題頁</title>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
      <Services>
         <asp:ServiceReference Path="MessageWebService.asmx" />
      </Services>
    </asp:ScriptManager>
        以MSSQL 2000里的示例數據庫Northwind里的Employees表為例<br />
         所要顯示的列                      
                                
         方式字段      提取記錄行數<br />
         <asp:CheckBox ID="cbID" runat="server" Text="ID" />
          
         <asp:CheckBox ID="cbLastName" runat="server" Text="LastName" />
          
         <asp:CheckBox ID="cbCity" runat="server" Text="City" />
            
         <asp:CheckBox ID="cbCountry" runat="server" Text="Country" />
          
         <asp:DropDownList ID="ddlOrder" runat="server">
             <asp:ListItem Value="EmployeeID" Text="ID"></asp:ListItem>
             <asp:ListItem Value="LastName" Text="LastName"></asp:ListItem>
             <asp:ListItem Value="City" Text="City"></asp:ListItem>
             <asp:ListItem Value="Country" Text="Country"></asp:ListItem>
         </asp:DropDownList>
              <asp:DropDownList ID="ddlRows" runat="server">
             <asp:ListItem>1</asp:ListItem>
             <asp:ListItem>2</asp:ListItem>
             <asp:ListItem>3</asp:ListItem>
             <asp:ListItem>5</asp:ListItem>
             <asp:ListItem>8</asp:ListItem>
             <asp:ListItem>10</asp:ListItem>
         </asp:DropDownList>
           
        <input id="buttonGO" style="width: 53px" type="button" value="GO" />
         <hr />
         <div id="resultXml"></div>
         
         <script type="text/javascript">
         var cbID;
         var cbLastName;
         var cbCity;
         var cbCountry;
         var ddlOrder;
         var ddlRows;
         var resultXml;
         var buttonGO;
         
         //初始化控件引用及事件
         function pageLoad()
         {
            cbID = $get("<% =cbID.ClientID %>");
            cbLastName = $get("<% =cbLastName.ClientID %>");
            cbCity = $get("<% =cbCity.ClientID %>");
            cbCountry = $get("<% =cbCountry.ClientID %>");
            
            ddlOrder = $get("<% =ddlOrder.ClientID %>");
            ddlRows = $get("<% =ddlRows.ClientID %>");
            
            resultXml = $get("resultXml");
           buttonGO = $get("buttonGO");
            $addHandler(buttonGO,"click",onButtonClicked);
            
            onButtonClicked(null);
         }
         
         function onButtonClicked(eventElement)
         {
            if(!cbID.checked && !cbLastName.checked && cbCity.checked && cbCountry.checked)
            {
                alert("至少選擇一列!");
                return;
            }
            
            var orderBy = ddlOrder.options[ddlOrder.selectedIndex].value;
            var maxRows = ddlRows.options[ddlRows.selectedIndex].value;
            
            //調用WebService獲取數據
            MessageWebService.GetEmployees(orderBy,maxRows,onXmlMessageCallback);
         }
         
         //回調函數
         function onXmlMessageCallback(result)
         {
            var xml;
            if(window.ActiveXObject)  //IE
            {
                xml = new ActiveXObject("Microsoft.XMLDOM");
                xml.async = false;
                xml.loadXML(result);
            }
           else
           {
               var parser = new DOMParser();
               xml = parser.parseFromString(result,"text/xml");
           }
           
           var employees = xml.getElementsByTagName("Employee");
           var html = new Sys.StringBuilder();
           html.append("<table width='500px' cellspacing='1' cellpadding='0' border='0' bgcolor='#999999'>");
           //構建表頭
           html.append("<tr>");
           if(cbID.checked)
              html.append("<td bgcolor='lightblue'><b>ID</b></td>");
           if(cbLastName.checked)
              html.append("<td bgcolor='lightblue'><b>LastName</b></td>"); 
           if(cbCity.checked)
              html.append("<td bgcolor='lightblue'><b>City</b></td>"); 
           if(cbCountry.checked)
              html.append("<td bgcolor='lightblue'><b>Country</b></td>");
           html.append("<tr>");
          
           //構建數據行
           for (var i=0; i<employees.length;i++)
           {
               html.append("<tr>");
               if(cbID.checked)
               {
                   var id= employees[i].getElementsByTagName("EmployeeID")[0].childNodes[0].nodeValue;
                   html.append("<td>"+id+"</td>");
               }
               if(cbLastName.checked)
               {
                   var LastName= employees[i].getElementsByTagName("LastName")[0].childNodes[0].nodeValue;
                   html.append("<td>"+LastName+"</td>");
               }
               if(cbCity.checked)
               {
                   var City= employees[i].getElementsByTagName("City")[0].childNodes[0].nodeValue;
                   html.append("<td>"+City+"</td>");
               }
               if(cbCountry.checked)
               {
                   var Country= employees[i].getElementsByTagName("Country")[0].childNodes[0].nodeValue;
                   html.append("<td>"+Country+"</td>");
               }
               html.append("</tr>");
           }
           
           html.append("</table>");
           resultXml.innerHTML=html.toString();
        }
        </script>
    </form>
</body>
</html>

文章中有部分內容我作了修改,在原文中加入了示例分析。希這篇文章對大家有所幫助,要更深入的學習AJAX是數據傳輸請查閱其他相關書籍或資料。歡迎大家拍磚指正,謝謝。

【編輯推薦】

  1. 探索AJAX中的消息傳輸模式 (下)
  2. ASP.NET AJAX框架調用后臺代碼的基本方法
  3. 使用AJAX構建更優秀的Web應用程序
  4. 使用 jQuery 簡化 Ajax 開發
責任編輯:楊鵬飛 來源: 博客園
相關推薦

2009-01-03 16:29:45

AJAXASP.NET.NET

2018-01-12 17:03:29

HTTPgzip壓縮

2014-03-04 15:28:32

iOS開發消息傳遞機制

2022-10-28 13:33:05

Push模式互聯網高并發

2025-05-26 09:10:00

微服務系統發件箱模式

2019-06-24 16:00:17

探索Linuxrun

2010-07-14 17:16:35

SOAP協議

2018-10-29 08:47:48

傳輸模式無線

2017-08-14 15:14:33

2012-09-04 09:23:45

HTML5消息傳輸傳輸機制

2023-01-04 07:39:39

2013-04-16 13:57:36

2021-05-19 07:50:53

Node.js數據傳輸

2022-09-14 11:25:15

BFF架構分布式系統

2010-06-28 17:00:58

FTP傳輸模式

2009-06-18 15:23:49

緩存控制器模式Ajax模式

2016-07-05 10:53:56

2022-07-21 07:14:16

無代碼模式

2024-12-04 15:38:43

2024-08-12 16:16:29

點贊
收藏

51CTO技術棧公眾號

久久精品国产欧美激情| 欧美伊人久久大香线蕉综合69| 成人欧美一区二区三区视频| 国产一卡二卡在线| 国产探花在线精品| 麻豆91在线播放免费| 精品亚洲成av人在线观看| 萌白酱国产一区二区| 久久一区二区电影| 亚洲三级电影| 欧美日韩一区二区免费在线观看| 亚洲欧洲国产日韩精品| 天堂网在线观看视频| 久草在线在线精品观看| 青青草国产精品一区二区| 三级影片在线看| 国产一区二区三区四区五区| 欧美xxxx老人做受| 爱爱爱爱免费视频| 欧美电影免费观看网站| 亚洲一区中文在线| 一区二区视频在线免费| 欧美高清成人| 99在线视频精品| 91亚洲精品久久久| 日韩久久久久久久久久| 麻豆精品91| 久久久久久久久久久免费 | 国产又粗又黄又爽视频| 国产精品亚洲产品| 久久久久久亚洲精品| 亚洲欧美小视频| 成人高清av| 亚洲人午夜色婷婷| 日本一区二区三区网站| 波多野结衣在线一区二区 | 日本a一级在线免费播放| 国产毛片精品视频| 成人免费自拍视频| 国产又大又黄的视频| 视频在线在亚洲| 奇米4444一区二区三区| 香蕉免费毛片视频| 亚洲国产日本| 91黑丝高跟在线| 日本最新中文字幕| 日韩香蕉视频| 欧美综合一区第一页| 国产 欧美 日韩 在线| 亚洲一级高清| 91精品国产99| 99热只有这里有精品| 中日韩视频在线观看| 91福利视频在线观看| 中文字幕亚洲高清| 免费在线成人| 日本午夜一区二区| 亚洲色图色老头| 精品国产无码在线观看| 亚洲人成精品久久久| 亚洲欧美综合v| www.黄色在线| 日韩理论电影| 欧美成人一区在线| 欧美精品入口蜜桃| 亚洲美女毛片| 日韩免费中文字幕| 成人免费一区二区三区| 久久av老司机精品网站导航| 91香蕉国产在线观看| 午夜精品久久久久久久第一页按摩 | 欧美日韩在线免费播放| 97欧美成人| 6080午夜不卡| 中国xxxx性xxxx产国| 性人久久久久| 按摩亚洲人久久| 亚洲精品在线观看av| 在线看片不卡| 欧美性受xxxx白人性爽| 欧美人一级淫片a免费播放| 另类调教123区| 国产成人精品免费视频大全最热 | 国产精品zjzjzj在线观看| 日韩成人xxxx| 亚洲欧美精品伊人久久| 91小视频网站| 波多野结衣一区二区三区免费视频| 亚洲第一精品夜夜躁人人爽| 欧洲av一区二区三区| 婷婷成人基地| 欧美亚洲在线播放| 97caocao| 久久一区二区三区四区| 国产大尺度在线观看| 色在线中文字幕| 欧美精品乱码久久久久久按摩| 国产高潮失禁喷水爽到抽搐| 免费一区二区三区视频导航| 欧美xxxx18性欧美| av片免费观看| 国产999精品久久久久久| 欧美视频1区| 免费看电影在线| 在线观看日韩一区| 欧美一区二区免费在线观看| 日韩理论电影大全| 77777少妇光屁股久久一区| 中文字幕在线观看精品| 99精品视频一区二区| 自拍偷拍亚洲色图欧美| 一区二区电影免费观看| 日韩免费在线观看| 日本免费www| 国产亚洲一区在线| 亚洲xxxx在线| 在线观看免费黄色| 色香蕉成人二区免费| 免费看黄色片的网站| 国产精品99一区二区三区| 日本一区二区不卡| 天堂v在线观看| 一区二区三区精品| 国产一区二区在线观看免费视频| 久久91麻豆精品一区| 国产69精品久久久| 亚洲国产精品视频在线| 亚洲视频一二三区| 中国黄色片一级| 欧美久久综合网| 日韩暖暖在线视频| 欧美新色视频| 色综合久久综合| 插吧插吧综合网| 亚洲色诱最新| 精品欧美一区二区三区久久久| 尤物yw193can在线观看| 日韩一区二区三区视频在线| 国产真人真事毛片视频| 日韩精品电影一区亚洲| 欧美一级片免费观看| 女人让男人操自己视频在线观看| 欧美精品一区二区蜜臀亚洲| 久久久久成人精品无码| 国产黄色精品视频| 日韩不卡视频一区二区| 欧美久久一区二区三区| 欧美裸身视频免费观看| 国产哺乳奶水91在线播放| 亚洲人成人一区二区在线观看| 日本黄色福利视频| 91综合久久| 91中文精品字幕在线视频| 成年人网站在线| 日韩视频123| 国产极品美女高潮无套嗷嗷叫酒店| 粉嫩绯色av一区二区在线观看| www.av91| 伊人久久大香线蕉无限次| 日韩av快播网址| av大片在线播放| 9191成人精品久久| 欧美黄色免费观看| av一本久道久久综合久久鬼色| 妞干网在线视频观看| 亚洲肉体裸体xxxx137| 国产精品热视频| 亚洲七七久久综合桃花剧情介绍| 精品久久一区二区三区| 亚洲 欧美 视频| 中日韩av电影| 成人三级做爰av| 一区二区精品| 亚洲 国产 日韩 综合一区| 国产精品亚洲欧美一级在线| 欧美高清第一页| 麻豆app在线观看| 欧美久久久久久久久久| 免费一级片视频| 久久久久九九视频| 国产欧美精品一二三| 伊人成年综合电影网| 欧美色欧美亚洲另类七区| 国产精品久久久久久久久久辛辛 | 91丨porny丨首页| 国产又大又黄又粗的视频| 亚洲自拍偷拍网| 久久久久九九九| 日韩大陆av| 91av国产在线| 免费在线看a| 亚洲国产精品成人va在线观看| 成人av网站在线播放| 亚洲精品ww久久久久久p站| 午夜理伦三级做爰电影| 国产麻豆午夜三级精品| 久久久久久久激情| 欧美精品国产一区二区| 日本一区二区三区www| 亚洲成人五区| 国产精品久久久久91| 精品精品导航| 色偷偷88888欧美精品久久久 | 99久久99久久精品免费观看 | 高潮毛片又色又爽免费| 一区二区三区在线播放| 亚洲第一综合网| 成人av在线网站| 91精产国品一二三产区别沈先生| 国产亚洲精品v| 成人一级生活片| 亚洲精品国产首次亮相| 日韩av免费电影| 精品国产乱子伦一区二区| 91精品国产综合久久香蕉最新版 | 国产精品无码专区| 国产一区欧美一区| 熟妇人妻无乱码中文字幕真矢织江 | 日韩免费在线电影| 欧洲美女免费图片一区| 欧美1—12sexvideos| 久久精品电影网| 98在线视频| 亚洲天堂色网站| 午夜成人免费影院| 日韩欧美久久久| 国产精品午夜福利| 欧美偷拍一区二区| 日韩黄色一级视频| 欧美日韩免费在线观看| 日韩和一区二区| 亚洲国产精品久久人人爱蜜臀| 成人免费精品动漫网站| 国产精品网友自拍| 中字幕一区二区三区乱码| 91女厕偷拍女厕偷拍高清| av在线播放网址| 成人av网站免费观看| 日韩女优在线视频| 成人动漫一区二区| 日本国产在线视频| av不卡一区二区三区| 中文字幕乱码一区| 99精品在线免费| 白丝女仆被免费网站| 久久久久久久久久久久久久久99 | av在线三区| 原创国产精品91| √新版天堂资源在线资源| 有码中文亚洲精品| 秋霞成人影院| 久久成人国产精品| 日本乱理伦在线| 午夜精品在线视频| 正在播放日韩精品| 国产精品1234| 亚洲午夜剧场| 91九色蝌蚪成人| 日本韩国欧美超级黄在线观看| 农村寡妇一区二区三区| 成人羞羞网站入口| 中文字幕不卡每日更新1区2区| 99久久精品费精品国产| 最新视频 - x88av| 精品99视频| 久章草在线视频| 卡一卡二国产精品| 亚洲美女高潮久久久| xf在线a精品一区二区视频网站| 亚洲av成人无码久久精品| 亚洲欧洲精品一区二区三区不卡| 欧美三级日本三级| 精品久久久一区| 中文字幕制服诱惑| 日韩一区二区三区四区| 三级黄视频在线观看| 色播久久人人爽人人爽人人片视av| 超碰免费在线播放| 91高清视频免费| 久久精品黄色| 国产一区自拍视频| 日韩av久操| 欧洲精品一区二区三区久久| 久久一区中文字幕| 三级黄色片免费看| 久久综合久久综合久久| 情侣偷拍对白清晰饥渴难耐| 亚洲国产另类精品专区| 国产精品无码粉嫩小泬| 精品久久久久久亚洲综合网| 国产三区四区在线观看| 欧美国产精品va在线观看| 日韩高清中文字幕一区二区| 91久久伊人青青碰碰婷婷| 自拍偷拍精品| 97在线免费视频观看| 久久综合图片| 年下总裁被打光屁股sp | 亚洲精品电影网| 免费人成在线观看播放视频| 97国产在线视频| 国产日韩一区二区三免费高清| 欧美三级华人主播| 亚洲激情网址| 国内av免费观看| 中文子幕无线码一区tr| 欧美日韩综合在线观看| 日韩欧美中文字幕公布| 在线观看免费网站黄| 日韩美女在线播放| 牛牛影视一区二区三区免费看| 色一情一乱一乱一区91| 日本美女一区二区| 巨胸大乳www视频免费观看| 亚洲一区中文在线| 国产99视频在线| 最近中文字幕2019免费| 国产精品av一区二区三区 | 亚洲成人激情自拍| 国内精品国产成人国产三级| 日韩中文字幕在线看| 日韩一区二区三区在线免费观看| 国产亚洲一区二区三区在线播放| 亚洲欧美文学| 久久精品亚洲天堂| 国产精品久久看| 亚洲视频久久久| 国产午夜精品全部视频播放| 亚洲黄色网址| 久久精品国产精品国产精品污 | 99久久婷婷| 成 人 黄 色 小说网站 s色| 国产欧美一二三区| 日韩国产亚洲欧美| 在线观看国产成人av片| 日韩一级二级| 欧美另类一区| 久久三级福利| 91成人在线免费视频| 色婷婷久久综合| 国产精品秘入口| 国产精品久久久久高潮| 波多野结衣的一区二区三区| 午夜免费一区二区| 欧美激情综合在线| 中文字幕av无码一区二区三区| 伊人av综合网| 国产精品美女午夜爽爽| 一本久道久久综合| 国产综合久久久久久鬼色| 午夜国产福利一区二区| 日韩欧美在线观看一区二区三区| av电影免费在线观看| www.久久艹| 亚洲精品1区| 91久久免费视频| 欧美精品一卡两卡| 91三级在线| 国产欧美综合精品一区二区| 国产精品丝袜xxxxxxx| 日本二区在线观看| 欧美三级在线视频| av在线app| 国内精品视频免费| 免播放器亚洲| 日本不卡一二区| 日韩精品一区二区三区蜜臀| 在线黄色的网站| 亚洲a∨一区二区三区| 国产一二精品视频| 日韩毛片在线视频| 国产香蕉97碰碰久久人人| 99热这里有精品| 国产主播自拍av| 国产婷婷一区二区| 国产美女明星三级做爰| 午夜免费日韩视频| 水蜜桃精品av一区二区| xxxxwww一片| 色婷婷综合中文久久一本| 天天在线视频色| 精品麻豆av| 久久99久久精品| 91porny在线| 久久精品人人做人人爽| 麻豆一区一区三区四区| 五月婷婷丁香色| 性感美女极品91精品| av电影在线观看| 国产一级特黄a大片99| 麻豆91精品91久久久的内涵| 久久9999久久免费精品国产| 永久免费毛片在线播放不卡| 国产精品jk白丝蜜臀av小说| 久久99爱视频| 欧美日韩激情网| 成人看av片| 日产精品久久久一区二区| 丁香婷婷综合色啪| 亚洲特级黄色片|