婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > ajax數據傳輸方式實例詳解

ajax數據傳輸方式實例詳解

熱門標簽:硅語電話機器人公司 云呼外撥網絡電話系統 超級大富翁地圖標注 騰訊地圖標注位置能用多久 個人怎樣在百度地圖標注地名 ai機器人電銷資源 機器人電銷騙局揭秘 地圖標注項目怎么樣 越南河內地圖標注

本文實例講述了ajax數據傳輸方式。分享給大家供大家參考,具體如下:

在異步應用程序中發送和接收信息時,常見的可以選擇以純文本和XML作為數據格式(可參考《jQuery學習筆記之Ajax用法實例詳解》),現在還有一種比較流行的方式:JSON(JavaScript Object Notation)。好了,下面舉例說明這三種數據格式在ajax的異步應用。

一、純文本方式

1、發送/接收數據:

Code is cheap.看代碼:
testJs.js

// 此函數等價于document.getElementById /document.all
function $(s) { if (document.getElementById) { return eval('document.getElementById("' + s + '")'); } else { return eval('document.all.' + s); } }
// 創建 XMLHttpRequest對象,以發送ajax請求 
function createXMLHTTP() {
  var xmlHttp = false;
  var arrSignatures = ["MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0",
             "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP",
             "Microsoft.XMLHTTP"];
  for (var i = 0; i  arrSignatures.length; i++) {
    try {
      xmlHttp = new ActiveXObject(arrSignatures[i]);
      return xmlHttp;
    }
    catch (oError) {
      xmlHttp = false; //ignore
    }
  }
  // throw new Error("MSXML is not installed on your system."); 
  if (!xmlHttp  typeof XMLHttpRequest != 'undefined') {
    xmlHttp = new XMLHttpRequest();
  }
  return xmlHttp;
}
var xmlReq = createXMLHTTP();
// 發送ajax處理請求(這里簡單驗證用戶名和密碼的有效性,默認正確的輸入:用戶名和密碼都是test)
function validatePwd(oTxt) {
  var url = "/AjaxOperations.aspx";
  xmlReq.open("post", url, true);
  xmlReq.setRequestHeader("Content-Length", oTxt.value.length + $("txtUserName").value.length);
  xmlReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  xmlReq.onreadystatechange = callBack;
  xmlReq.send("action=chkPwduserInfos=" + escape(oTxt.value + "/" + $("txtUserName").value)); // 發送文本
}
function callBack() {
  if (xmlReq.readyState == 4) {
    if (xmlReq.status == 200) {
      alert(xmlReq.responseText); // 接收文本
    }
    else if (xmlReq.status == 404) {
      alert("Requested URL is not found.");
    } else if (xmlReq.status == 403) {
      alert("Access denied.");
    } else
      alert("status is " + xmlReq.status);
  }
}

幾個附加文件源碼:

jsTest.htm

html>
head>
title>js test/title>
  script src="js/testJs.js" type="text/javascript">/script> 
/head>
body>
form id="form1">
div>
 用戶名:input id="txtUserName" name="txtUserName" type="text" /> nbsp;密碼:input id="txtPwd" name="txtPwd" type="password" onblur="validatePwd(this)" />/div>
/form>
/body>
/html>

AjaxOperations.aspx

復制代碼 代碼如下:
%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AjaxOperations.aspx.cs" Inherits="WebTest2008.AjaxOperations" %>

AjaxOperations.aspx.cs

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebTest2008
{
  public partial class AjaxOperations : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {
      if (!string.IsNullOrEmpty(Request["action"])  Request["action"] == "chkPwd")
      {
        string responseTxt = "用戶名和密碼不匹配!";
        string tempStr = Request["userInfos"];
        /* 測試用 實際項目中可以對數據庫進行檢索等等相關操作,這里簡化了 */
        if (tempStr.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries)[0] == "test"  tempStr.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries)[1] == "test")
        {
          responseTxt = "驗證通過!";
        }
        Response.Write(responseTxt);
      }
    }
  }
}

一一保存文件,ctrl+F5,運行試試看吧。

上面這種方式是最簡單最直接也是最有效的方式。熟練使用最佳。

二、XML方式

1、發送XML數據

testJs.js

// 此函數等價于document.getElementById /document.all
function $(s) { if (document.getElementById) { return eval('document.getElementById("' + s + '")'); } else { return eval('document.all.' + s); } }
// 創建 XMLHttpRequest對象,以發送ajax請求 
function createXMLHTTP() {
  var xmlHttp = false;
  var arrSignatures = ["MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0",
             "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP",
             "Microsoft.XMLHTTP"];
  for (var i = 0; i  arrSignatures.length; i++) {
    try {
      xmlHttp = new ActiveXObject(arrSignatures[i]);
      return xmlHttp;
    }
    catch (oError) {
      xmlHttp = false; //ignore
    }
  }
  // throw new Error("MSXML is not installed on your system."); 
  if (!xmlHttp  typeof XMLHttpRequest != 'undefined') {
    xmlHttp = new XMLHttpRequest();
  }
  return xmlHttp;
}
var xmlReq = createXMLHTTP();
// 發送ajax處理請求(這里簡單驗證用戶名和密碼的有效性,默認正確的輸入:用戶名和密碼都是test)
function validatePwd(oTxt) {
  var url = "/AjaxOperations.aspx?action=xmlOp";
  var xmlStr = "profile>" +
  " userName>" + escape($("txtUserName").value) + "/userName>" +
  " userPwd>" + escape($("txtPwd").value) + "/userPwd>" +
  "/profile>";
  xmlReq.open("post", url, true);
  // Tell the server you're sending it XML
  xmlReq.setRequestHeader("Content-Type", "text/xml"); // 這里注意
  xmlReq.onreadystatechange = callBack;
  xmlReq.send(xmlStr); // 發送XML
}
function callBack() {
  if (xmlReq.readyState == 4) {
    if (xmlReq.status == 200) {
      alert(xmlReq.responseText); // 接收文本
    }
    else if (xmlReq.status == 404) {
      alert("Requested URL is not found.");
    } else if (xmlReq.status == 403) {
      alert("Access denied.");
    } else
      alert("status is " + xmlReq.status);
  }
}

jsTest.htm文件不變,AjaxOperations.aspx的HTML文件內容不變,服務器端.CS處理代碼如下:

AjaxOperations.aspx.cs

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml;
namespace WebTest2008
{
  public partial class AjaxOperations : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {
      if (!string.IsNullOrEmpty(Request["action"])  Request["action"] == "xmlOp") // 處理xml
      {
        XmlDocument doc = new XmlDocument();
        try
        {
          doc.Load(Request.InputStream); //獲取xml數據(這里需要注意接受xml數據的方法)
        }
        catch (Exception ex)
        {
          throw ex;
        }
        string responseTxt = "";
        string tempName = doc.SelectSingleNode("profile/userName").InnerText;
        string tempPwd = doc.SelectSingleNode("profile/userPwd").InnerText;
        if (tempName == "test"  tempPwd == "test")
        {
          responseTxt = "驗證通過!";
        }
        else responseTxt = "驗證失敗!";
        Response.Write(responseTxt); // 寫文本
      }
    }
  }
}

很簡單的代碼,運行看看吧。

2、接收XML數據:

我們看到,上面兩個.js文件里處理返回數據時都用到了xmlReq.responseText的屬性,下面我們試試看xmlReq.responseXML屬性:

testJs.js

// 此函數等價于document.getElementById /document.all
function $(s) { if (document.getElementById) { return eval('document.getElementById("' + s + '")'); } else { return eval('document.all.' + s); } }
// 創建 XMLHttpRequest對象,以發送ajax請求 
function createXMLHTTP() {
  var xmlHttp = false;
  var arrSignatures = ["MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0",
             "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP",
             "Microsoft.XMLHTTP"];
  for (var i = 0; i  arrSignatures.length; i++) {
    try {
      xmlHttp = new ActiveXObject(arrSignatures[i]);
      return xmlHttp;
      }
    catch (oError) {
      xmlHttp = false; //ignore
    }
  }
  // throw new Error("MSXML is not installed on your system."); 
  if (!xmlHttp  typeof XMLHttpRequest != 'undefined') {
    xmlHttp = new XMLHttpRequest();
  }
  return xmlHttp;
}
var xmlReq = createXMLHTTP();
// 發送ajax處理請求(這里簡單驗證用戶名和密碼的有效性,默認正確的輸入:用戶名和密碼都是test)
function validatePwd(oTxt) {
  var url = "/AjaxOperations.aspx?action=xmlOp";
  var xmlStr = "profile>" +
  " userName>" + escape($("txtUserName").value) + "/userName>" +
  " userPwd>" + escape($("txtPwd").value) + "/userPwd>" +
  "/profile>";
  xmlReq.open("post", url, true);
  // Tell the server you're sending it XML
  xmlReq.setRequestHeader("Content-Type", "text/xml");
  xmlReq.onreadystatechange = callBack;
  xmlReq.send(xmlStr); // 發送XML
}
function callBack() {
  if (xmlReq.readyState == 4) {
    if (xmlReq.status == 200) {
      var xmlDoc = xmlReq.responseXML; // 接收XML
      //      var nodes = xmlDoc.childNodes;
      //      alert("文件根標簽的名稱: " + xmlDoc.documentElement.tagName);
      //      alert("根元素共有子節點個數: " + xmlDoc.documentElement.childNodes.length);
      alert(xmlDoc.documentElement.childNodes(0).text);
    }
    else if (xmlReq.status == 404) {
      alert("Requested URL is not found.");
    } else if (xmlReq.status == 403) {
      alert("Access denied.");
    } else
      alert("status is " + xmlReq.status);
  }
}

同樣,jsTest.htm文件不變,AjaxOperations.aspx的HTML文件內容不變,服務器端.CS處理代碼稍作修改如下:

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml;
namespace WebTest2008
{
  public partial class AjaxOperations : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {
      if (!string.IsNullOrEmpty(Request["action"])  Request["action"] == "xmlOp") // 處理xml
      {
        XmlDocument doc = new XmlDocument();
        try
        {
          doc.Load(Request.InputStream); //獲取xml數據
        }
        catch (Exception ex)
        {
          throw ex;
        }
        string responseXmlTxt = "";
        string tempName = doc.SelectSingleNode("profile/userName").InnerText;
        string tempPwd = doc.SelectSingleNode("profile/userPwd").InnerText;
        if (tempName == "test"  tempPwd == "test")
        {
          responseXmlTxt = "?xml version=\"1.0\" encoding=\"utf-8\" ?> msg>驗證通過!/msg>"; // 測試用,簡單的xml文件
        }
        else responseXmlTxt = "?xml version=\"1.0\" encoding=\"utf-8\" ?>msg>驗證失敗!/msg>";
        Response.ContentType = ("text/xml;charset=UTF-8"); // 這里必須要設置,否則客戶端接收不到這里寫好的xml文件
        Response.Write(responseXmlTxt); // 寫xml
        Response.End();
      }
    }
  }
}

好了,前面兩種方法是大家平時開發中比較熟悉的方式,下面我們來看看第三種方式。

三、JSON方式

json的準備知識:

json是一種簡單的數據格式,比xml更輕巧。json是JavaScript 的原生格式,這意味著在 JavaScript 中處理json格式的 數據不需要任何特殊的API 或工具包。json的語法規則其實很簡單:對象是一個無序的“‘名稱/值'對”集合。一個對象以“{”(左括號)開始,“}”(右括號)結束。每個“名稱”后跟一個“:”(冒號);“‘名稱/值' 對”之間使用“,”(逗號)分隔。看個例子先:

function testJson() {
  //定義一個user(json的格式,其實就是定義一個js函數(變量)的方式而已)
  var user =
  {
    "username": "jeff wong",
    "age": 25,
    "info": { "tel": "12345678", "cellphone": "13312345678" },
    "address": // 數組
      [
        { "city": "beijing", "postcode": "101110" },
        { "city": "ny city", "postcode": "911119" }
      ]
  }
  alert(user.username);
  alert(user.age);
  alert(user.info.cellphone);
  alert(user.address[0].city);
  alert(user.address[0].postcode);
  user.username = "xiao wang";
  alert(user.username); 
}

上面的定義方式看起來很簡單,但是如果字段眾多,命名方式混雜,出錯的概率大大增加,怎么辦?這時候你就會想到用程序的方式生成json數據。json提供了json.js包,專門提供了幾種常用的json處理函數。下載下來,(json.js點擊此處本站下載。) ,將其引入然后就可以簡單的使用object.toJSONString()轉換成json數據。看代碼:

function Car(maker, model, year, color) {
  this.maker = maker;
  this.model = model;
  this.year = year;
  this.color = color;
}
function testJson() {
  var tempCar = new Car("VW", "S", 1999, "yellow");
  alert(tempCar.toJSONString());
}

也可以使用eval或者parseJSON()方法來轉換json數據到object:

function testJson() {
  var str = '{ "name": "jeff wong", "age": 25,"address":"beijing"}';
  var tempObj = eval('(' + str + ')');
  alert(tempObj.toJSONString()); //使用eval方法
  var tempObj1 = str.parseJSON();
  alert(tempObj1.toJSONString()); // 或者使用parseJSON()方法
}

關于json.js的學習,請參考網上其他資源,這里我不再贅述了。說了這么多,實踐環節開始了:

ajax利用json發送/接收數據:

// 此函數等價于document.getElementById /document.all
function $(s) { if (document.getElementById) { return eval('document.getElementById("' + s + '")'); } else { return eval('document.all.' + s); } }
// 創建 XMLHttpRequest對象,以發送ajax請求 
function createXMLHTTP() {
  var xmlHttp = false;
  var arrSignatures = ["MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0",
             "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP",
             "Microsoft.XMLHTTP"];
  for (var i = 0; i  arrSignatures.length; i++) {
    try {
      xmlHttp = new ActiveXObject(arrSignatures[i]);
      return xmlHttp;
    }
    catch (oError) {
      xmlHttp = false; //ignore
    }
  }
  // throw new Error("MSXML is not installed on your system."); 
  if (!xmlHttp  typeof XMLHttpRequest != 'undefined') {
    xmlHttp = new XMLHttpRequest();
  }
  return xmlHttp;
}
var xmlReq = createXMLHTTP();
// 發送ajax處理請求(這里簡單驗證用戶名和密碼的有效性,默認正確的輸入:用戶名和密碼都是test)
function validatePwd(oTxt) {
  var url = "/AjaxOperations.aspx?action=jsonOp";
  // JSON就只是文本,由于不需要特殊編碼而且每個服務器端腳本都能處理文本數據,所以可以輕松利用JSON并將其應用到服務器。
  var str = '{ "userName":"' + $("txtUserName").value + '", "userPwd": "' + $("txtPwd").value + '"}';
  var jsonStr = str.parseJSON().toJSONString();   // you're sending it JSON
  xmlReq.open("post", url, true);
  xmlReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  xmlReq.onreadystatechange = callBack;
  xmlReq.send("sendStr=" + jsonStr); // 發送JSON(在服務器上解釋JSON)
}
function callBack() {
  if (xmlReq.readyState == 4) {
    if (xmlReq.status == 200) {
      var jsonStr = xmlReq.responseText.parseJSON().toJSONString(); //轉化為json數據
      alert(jsonStr);
    }
    else if (xmlReq.status == 404) {
      alert("Requested URL is not found.");
    } else if (xmlReq.status == 403) {
      alert("Access denied.");
    } else
      alert("status is " + xmlReq.status);
  }
}

附加文件,AjaxOperations.aspx的html頁面沒有改變,AjaxOperations.aspx.cs代碼稍作調整如下:

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebTest2008
{
  public partial class AjaxOperations : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {
      if (!string.IsNullOrEmpty(Request["action"])  Request["action"] == "jsonOp") // 處理JSON
      {
        string responseJsonTxt = "";
        string tempStr = Request["sendStr"].Trim(new char[] { '{', '}' }); // 在服務器上解釋JSON需要引用一個能夠轉化JSON的組件:Json.Net,這里簡單測試,略過Json.Net
        if (tempStr.Split(new char[] { ',' })[0].Split(new char[] { ':' })[1] == "\"test\""  tempStr.Split(new char[] { ',' })[1].Split(new char[] { ':' })[1] == "\"test\"")
        {
          responseJsonTxt = "{\"msg\":\"驗證通過!\"}"; // 測試用
        }
        else responseJsonTxt = "{\"msg\":\"驗證失敗!\"}";
        Response.Write(responseJsonTxt);
        Response.End();
      }
    }

jsTest.html引入json.js文件(必須下載json.js文件,否則js報錯),如下:

html>
head>
 title>js test/title>
 script src="js/json.js" type="text/javascript">/script>
 script src="js/testJs.js" type="text/javascript">/script>
/head>
body>
 form id="form1">
 div>
 用戶名:input id="txtUserName" name="txtUserName" type="text" />
 nbsp;密碼:input id="txtPwd" name="txtPwd" type="password" onblur="validatePwd(this)" />/div>
 /form>
/body>
/html>

希望本文所述對大家ajax程序設計有所幫助。

您可能感興趣的文章:
  • JQuery中使用ajax傳輸超大數據的解決方法
  • AJAX 異步傳輸數據的問題
  • Ajax實現的異步傳輸與驗證示例代碼
  • Ajax異步傳輸與PHP實現交互示例
  • Ajax同步與異步傳輸的示例代碼
  • 利用ThinkPHP內置的ThinkAjax實現異步傳輸技術的實現方法
  • AJAX在GB2312的中文編碼傳輸 AJAX特殊字符編碼正確方法
  • Ajax 對象 包含post和get兩種異步傳輸方式

標簽:林芝 鄭州 海南 洛陽 遼源 舟山 內蒙古 邢臺

巨人網絡通訊聲明:本文標題《ajax數據傳輸方式實例詳解》,本文關鍵詞  ajax,數據傳輸,方式,實例,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《ajax數據傳輸方式實例詳解》相關的同類信息!
  • 本頁收集關于ajax數據傳輸方式實例詳解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲香蕉伊在人在线观| 91视频在线观看免费| 国产精品综合在线视频| 亚洲18女电影在线观看| 91丨porny丨蝌蚪视频| 久久精品亚洲精品国产欧美| 日本成人在线视频网站| 欧美日韩的一区二区| 亚洲一区二区三区中文字幕在线| 成人avav影音| 国产精品久线在线观看| 丁香天五香天堂综合| 久久美女艺术照精彩视频福利播放| 日韩vs国产vs欧美| 欧美日韩国产在线观看| 亚洲美女屁股眼交3| av午夜精品一区二区三区| 中文字幕av一区二区三区免费看 | 国产精品一区久久久久| 欧美一区二区视频在线观看| 亚洲午夜影视影院在线观看| 欧美影视一区在线| 亚洲综合在线电影| 在线一区二区视频| 一级做a爱片久久| 欧美伊人久久久久久久久影院 | 欧洲精品一区二区三区在线观看| 一色屋精品亚洲香蕉网站| 成人黄色在线看| 91精品国产高清一区二区三区| 亚洲一区二区三区四区在线免费观看| 在线看一区二区| 亚洲高清三级视频| 欧美日韩不卡一区二区| 人人爽香蕉精品| 精品国产123| jizzjizzjizz欧美| 亚洲成人免费在线观看| 欧美一级一级性生活免费录像| 久久精品国产99久久6| 中文成人综合网| 欧美视频日韩视频在线观看| 日韩和的一区二区| 欧美v日韩v国产v| 成人一级视频在线观看| 一区二区三区免费看视频| 在线观看91av| 国产91露脸合集magnet| 一区二区三区国产| 欧美一区二区三区爱爱| 国产99久久久国产精品| 亚洲午夜精品17c| 久久久精品影视| 99久久久久久| 日本视频在线一区| 综合在线观看色| 日韩欧美一区二区在线视频| 国产成人精品aa毛片| 亚洲图片欧美色图| 久久精品网站免费观看| 欧美日韩亚洲国产综合| 粉嫩绯色av一区二区在线观看| 亚洲成人动漫av| 日韩欧美黄色影院| 蜜臀精品久久久久久蜜臀| 国产精品乱人伦| 91精品国产综合久久福利软件| 国产不卡免费视频| 欧美日韩你懂得| 成人av在线观| 经典三级在线一区| 一区二区三区免费| 中文乱码免费一区二区| 日韩一本二本av| 色激情天天射综合网| 国产成人午夜精品影院观看视频| 亚洲r级在线视频| 中文字幕亚洲一区二区av在线 | 欧美日韩夫妻久久| 99精品欧美一区二区三区综合在线| 首页综合国产亚洲丝袜| 国产欧美日韩亚州综合| 日韩欧美在线不卡| 精油按摩中文字幕久久| 亚洲午夜久久久久久久久电影院 | 国产精品三级电影| 日韩视频一区二区三区在线播放| 色综合色综合色综合 | 亚洲一区免费在线观看| 欧美韩国日本综合| 欧美成人女星排名| 欧美日韩性生活| 在线亚洲+欧美+日本专区| 成人涩涩免费视频| 国产在线精品一区二区夜色| 日韩中文字幕亚洲一区二区va在线| 亚洲欧美日韩久久精品| ...xxx性欧美| 亚洲色图欧美在线| 亚洲欧洲日韩在线| 欧美激情中文字幕一区二区| 久久久一区二区三区| 精品88久久久久88久久久| 日韩欧美一卡二卡| 日韩精品一区在线| 日韩女优制服丝袜电影| 日韩欧美一区在线| 日韩视频免费观看高清完整版在线观看 | 成人免费福利片| 国产精品88av| 国产精品中文字幕日韩精品| 九九精品一区二区| 国产精品77777竹菊影视小说| 国产精品1区2区| 波多野结衣亚洲| av中文一区二区三区| www.综合网.com| 欧美午夜片在线观看| 欧美一区二区三区免费观看视频| 欧美一级高清片| 久久综合色一综合色88| xf在线a精品一区二区视频网站| 精品剧情在线观看| 久久综合久久鬼色| 亚洲国产精品成人综合| 18涩涩午夜精品.www| 中文字幕日韩一区二区| 精品成人a区在线观看| 欧美成人一区二区三区在线观看| 日韩精品中文字幕在线不卡尤物| 91精品欧美综合在线观看最新| 精品成人一区二区| 久久久夜色精品亚洲| 久久综合久久综合九色| 久久久777精品电影网影网| 精品国产污网站| 久久亚洲综合色一区二区三区| 精品免费日韩av| 亚洲欧洲综合另类在线| 一区二区三区资源| 亚洲成人www| 日韩成人午夜电影| 看国产成人h片视频| 国内精品国产成人| 国产91丝袜在线观看| 99视频国产精品| 91国偷自产一区二区开放时间 | 欧美a一区二区| 麻豆久久一区二区| 视频一区视频二区在线观看| 亚洲国产精品久久一线不卡| 天使萌一区二区三区免费观看| 成人免费一区二区三区在线观看| 日本亚洲欧美天堂免费| 日本午夜精品一区二区三区电影| 日本女优在线视频一区二区| 久久国产婷婷国产香蕉| 色丁香久综合在线久综合在线观看| 91麻豆精品国产91久久久久 | 91免费国产在线观看| 在线精品视频小说1| 欧美日韩一区二区在线观看视频| 91精品久久久久久久99蜜桃| 国产精品久99| 亚洲成av人**亚洲成av**| 亚洲国产精品麻豆| 久久精品国产亚洲5555| 琪琪一区二区三区| 日本精品视频一区二区| 日韩亚洲国产中文字幕欧美| 久久久久久久性| 亚洲精品日日夜夜| 国产成人亚洲精品狼色在线| 日本精品视频一区二区| 日韩欧美在线网站| 18欧美乱大交hd1984| 亚洲一本大道在线| 色噜噜夜夜夜综合网| 日韩欧美一级二级三级 | 91丨porny丨蝌蚪视频| 色国产精品一区在线观看| 国产精品久久久久一区| 五月婷婷激情综合| 福利电影一区二区| 91精品国产乱| 五月开心婷婷久久| 9l国产精品久久久久麻豆| 欧美精品久久久久久久多人混战| 国产亲近乱来精品视频| 亚洲欧美乱综合| 99综合电影在线视频| 欧美一区二区精品| 亚洲伦理在线免费看| 久久91精品久久久久久秒播| 欧美一区二区三区精品| 中文字幕在线一区| 韩日欧美一区二区三区| 91天堂素人约啪| 亚洲精品第一国产综合野| 亚洲高清免费视频|