精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

精品成人一区二区三区| 99re热这里只有精品视频| 亚洲精品国产精品乱码不99按摩| 国产成人精品视频在线观看| 欧美一级淫片007| 欧美高清电影在线看| 国产 国语对白 露脸 | 永久免费看mv网站入口| 岛国毛片av在线| 久久久精品网| 欧美福利一区二区| 精品国产一区二区三区四区vr| av在线播放网址| av在线免费观看网站| 亚洲国产黄色| 欧美日韩电影在线| 麻豆视频传媒入口| 人人妻人人爽人人澡人人精品| 99久久人爽人人添人人澡| 中文字幕欧美日韩一区| 欧美疯狂xxxx大交乱88av| 中国av免费看| 午夜小视频在线观看| 99视频国产精品| 久99久在线视频| 少妇一级淫免费放| 在线免费观看的av| 日本免费新一区视频| 久久视频在线直播| 国产一级免费片| 日本免费一区二区三区四区| 国产在线精品不卡| 国产亚洲精品久久久久动| 久久久久xxxx| 国模冰冰炮一区二区| 成人精品小蝌蚪| 亚洲视频999| 国内av一区二区| 麻豆mv在线看| 成人夜色视频网站在线观看| 国产精品ⅴa在线观看h| 欧美日韩在线观看成人| 久久久加勒比| 精品成人av一区| ijzzijzzij亚洲大全| 你懂的在线视频| 大白屁股一区二区视频| 国产精品亚洲一区二区三区| 久久久久久九九九九九| 亚洲最大网站| 亚洲一区二区av电影| 国产精品免费一区二区三区| 亚洲天堂免费av| 裸体一区二区| 8x海外华人永久免费日韩内陆视频| 啪啪一区二区三区| 超碰cao国产精品一区二区| 欧美精品色一区二区三区| 黄色高清无遮挡| 激情小说 在线视频| 亚洲免费网址| 国内精品视频在线| 男的操女的网站| 1769国产精品视频| 亚洲综合色成人| 99久久伊人精品影院| 日本在线视频免费观看| aiss精品大尺度系列| 日韩欧美中文字幕在线观看| 国产视频一区二区三区四区| 中文字幕手机在线视频| 国产美女精品| 精品成人在线观看| 制服丝袜中文字幕第一页| 国内欧美日韩| 欧美喷潮久久久xxxxx| 午夜宅男在线视频| 日本在线一区二区| 午夜精品久久久久久久久| 中文字幕乱码免费| 精品176二区| 粉嫩av亚洲一区二区图片| 日韩av免费看网站| 无码人妻丰满熟妇啪啪欧美| 成人亚洲网站| 亚洲免费观看高清完整版在线观看 | 亚洲天堂av一区| 欧美精品一区二区三区在线| 日韩精品―中文字幕| 日韩av视屏| 久久嫩草精品久久久久| 日韩av电影免费观看| 国产极品久久久| 成人美女视频在线观看18| 精品在线视频一区二区| 欧美日韩伦理片| 中国色在线观看另类| 伊人色综合影院| 男人天堂网在线视频| 日韩电影在线免费观看| 久久精品视频一| 欧美色图亚洲激情| 国产一区二区三区不卡视频网站| 欧美mv和日韩mv国产网站| 欧美三级理论片| 2019中文亚洲字幕| 色偷偷88欧美精品久久久| 国产wwwxx| 亚洲涩涩在线| 欧美丝袜丝交足nylons| 免费观看黄网站| 日韩有码一区| www.久久撸.com| 在线免费观看毛片| 麻豆精品一区二区av白丝在线| 国产精品网友自拍| 高清欧美性猛交xxxx黑人猛交| 亚洲免费激情视频| 免费在线观看不卡| 88国产精品欧美一区二区三区| 亚洲图片欧美日韩| 国产精品亚洲综合一区在线观看| 久久久爽爽爽美女图片| 免费又黄又爽又猛大片午夜| 国产伦精一区二区三区| 日本一区二区三区视频免费看| 少女频道在线观看高清| 一本大道久久a久久综合| 蜜桃免费在线视频| 牛牛影视一区二区三区免费看| 日韩一区二区精品视频| 欧美日韩在线观看免费| 免费精品视频在线| 蜜桃91精品入口| 天堂a中文在线| 91在线观看一区二区| 亚洲一区三区| 欧美性videos| 欧美午夜视频一区二区| 国产精品中文久久久久久| 国产欧美久久一区二区三区| 欧美激情精品久久久久久变态 | 伊人青青综合网| 国产成+人+综合+亚洲欧洲| 亚洲av无码专区在线| 国产精品久久久久久久久久免费看| 久久精品日产第一区二区三区精品版| 欧美18一19xxx性| 色综合色狠狠天天综合色| 国产伦理在线观看| 99久久精品网站| 日韩美女在线观看一区| 无码精品在线观看| 亚洲午夜精品网| 免费不卡av网站| 天天综合亚洲| 国产欧美在线播放| melody高清在线观看| 欧美视频13p| 偷偷色噜狠狠狠狠的777米奇| 欧美精品日本| 国产欧美一区二区三区视频| 免费在线视频一级不卡| 香蕉乱码成人久久天堂爱免费| 日本中文字幕在线不卡| 1024精品久久久久久久久| 国产欧美日韩精品在线观看 | 2024国产精品视频| 国产免费黄色小视频| 精品一区二区三区四区五区| 欧美羞羞免费网站| 一级片手机在线观看| 美女国产精品| 日本一区视频在线观看| 亚洲电影有码| 日韩在线资源网| 国产毛片毛片毛片毛片毛片| 国产传媒日韩欧美成人| 亚洲五码在线观看视频| 精品999日本久久久影院| 久久九九免费视频| 一级特黄aaa大片| 国产精品少妇自拍| 污视频网站观看| 3d动漫一区二区三区在线观看| 自拍亚洲一区欧美另类| 国产又黄又大又爽| 一区二区三区四区激情| 中文字幕天堂网| 宅男噜噜噜66国产日韩在线观看| 国产精品在线看| 黄色网在线免费观看| 欧美精品丝袜中出| 亚洲伦理一区二区三区| 亚洲男人影院| 日韩资源av在线| 日本久久久久| 久久久久久久久久久人体 | 亚洲国产精品美女| 欧美黄色一级大片| 国产成人精品亚洲777人妖| 久久99久久99精品| 欧美日韩在线二区| 91久久国产精品| 波多一区二区| 在线电影欧美日韩一区二区私密| 一级片在线观看视频| 亚洲精品免费在线观看| 国产精品91av| 日韩精品午夜视频| 精品久久久无码人妻字幂| 性欧美lx╳lx╳| 91精品国产综合久久香蕉| 激情网站在线| 亚洲天堂久久av| 国产三级视频在线播放| 亚洲国产精品精华液网站| 无码精品a∨在线观看中文| 欧美一区二区麻豆红桃视频| 波多野结衣精品久久| 性高爱久久久久久久久| 欧美日本啪啪无遮挡网站| 毛片免费在线播放| 欧美变态tickling挠脚心| 精品国产午夜福利| 懂色中文一区二区在线播放| 欧美黑人又粗又大又爽免费| 欧美精品97| 亚洲综合视频一区| 欧美一区自拍| 亚洲影院在线看| 成人1区2区| 91精品国产高清| 97caopron在线视频| 亚洲精品美女网站| 国产强伦人妻毛片| 欧洲国产伦久久久久久久| 日本一级淫片色费放| 18成人在线观看| 精品无码人妻一区二区免费蜜桃| 成人禁用看黄a在线| 国产传媒免费观看| 丝袜美腿成人在线| 久久久久久久中文| 亚洲精品影视| 99久久99久久精品| 91精品1区| 一区二区三区不卡在线| 精品在线91| 久久久久久久久久码影片| 中文字幕日韩高清在线| 国产在线a不卡| 欧美aaaaaaaa| 国产精品欧美日韩久久| japanese23hdxxxx日韩 | 天堂av资源在线观看| 精品亚洲男同gayvideo网站 | 手机av在线| 97热在线精品视频在线观看| 亚洲av无码乱码国产麻豆| 正在播放亚洲一区| 中文字幕在线欧美| 偷拍一区二区三区四区| 久操免费在线视频| 亚洲影视在线播放| 国产无码精品久久久| 94色蜜桃网一区二区三区| av av在线| www.欧美日韩| 国产精品日日摸夜夜爽| 风间由美一区二区三区在线观看| 成人做爰69片免费| 成人h精品动漫一区二区三区| 2018国产精品| av在线不卡观看免费观看| 亚洲精品女人久久久| 91天堂素人约啪| 亚洲精品国产熟女久久久| 中文字幕+乱码+中文字幕一区| 永久免费毛片在线观看| 国产午夜精品一区二区| 性欧美精品男男| 中文字幕一区二区在线观看| 四虎影院中文字幕| 亚洲综合丝袜美腿| 久久久久久久久久久久久久av| 一本大道综合伊人精品热热| 最近中文字幕在线观看| 欧美日韩免费高清一区色橹橹 | 国产精品亚洲一区| 欧美在线导航| 日韩精品在在线一区二区中文| 色88久久久久高潮综合影院| 久久久久久久久影视| 在线免费高清一区二区三区| 亚洲中文字幕无码专区| 男男视频亚洲欧美| 在线观看一区二区三区视频| 99久久亚洲一区二区三区青草 | 国产精品精品国产色婷婷| 18精品爽国产三级网站| 一区二区三区四区国产精品| 日韩色图在线观看| 欧美久久久久久久久久| 日韩中文字幕观看| 在线中文字幕日韩| 青春草视频在线| 国产成人免费91av在线| 蜜桃精品一区二区三区| 欧美高清一区二区| 日本精品视频| 久久久7777| 亚洲成av人电影| 成人观看免费完整观看| 国产一区二区三区在线观看免费| 国产福利在线观看视频| 国产精品久久夜| 久久久久久久久影院| 91麻豆精品国产自产在线| 全色精品综合影院| 欧美成人中文字幕在线| 超碰人人在线| 91av视频在线免费观看| 精品国产一级| 日韩电影大全在线观看| 伊人狠狠色j香婷婷综合| 中文字幕第17页| 久久女同精品一区二区| 免费一级肉体全黄毛片| 狠狠久久五月精品中文字幕| 国产欧美久久久| 一本色道久久综合狠狠躁篇的优点| 欧美极品少妇videossex| 国产精品美女久久久久久免费| 91精品国产自产精品男人的天堂| 麻豆av在线免费看| 久久成人这里只有精品| yiren22亚洲综合| 茄子视频成人在线观看| 亚洲一区二区三区四区五区午夜| 在线中文字日产幕| 一区二区三区小说| 国产高清视频免费观看| 久久av在线播放| 久久久久亚洲精品中文字幕| 中文精品一区二区三区| 蜜臀av性久久久久蜜臀aⅴ流畅| 日韩免费成人av| 欧美日韩一区在线| 久草资源在线| 亚洲一区二区三区香蕉| 自拍日韩欧美| 免费黄视频在线观看| 亚洲观看高清完整版在线观看| 好吊色在线观看| 亚洲男女性事视频| 亚洲精品成人图区| 茄子视频成人在线观看 | 日本午夜人人精品| 国产一区二区三区探花 | 国产精品综合久久| 波多野结衣不卡视频| 欧美大片一区二区三区| 高清精品在线| 日本黑人久久| 久久国产精品第一页| 午夜国产福利一区二区| 精品国精品自拍自在线| aa国产成人| 日本视频一区在线观看| 久久精品国产亚洲一区二区三区| 日本精品在线免费观看| 欧美mv日韩mv亚洲| 天堂√8在线中文| 亚洲午夜精品久久| 国产宾馆实践打屁股91| 国产成人综合欧美精品久久| 中日韩美女免费视频网站在线观看| 婷婷精品久久久久久久久久不卡| 强开小嫩苞一区二区三区网站| 不卡视频一二三| 欧美高清69hd| 欧美日韩福利电影| 伊人成综合网伊人222| 黄色a级在线观看| 懂色中文一区二区在线播放| 久久精品视频5| 久久亚洲欧美日韩精品专区| 久久视频在线观看| 91国产精品视频在线观看| 亚洲综合一二三区| 高清日韩av电影| 国产精品福利视频| 午夜亚洲福利| 波多野结衣a v在线| 欧美一区二区三区爱爱| 性欧美18~19sex高清播放| 五月天综合婷婷| 国产午夜久久久久| 黄色片一区二区三区|