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

一套通用Ajax框架的源代碼

開發(fā) 前端
本文提供了一套一套通用Ajax框架的源代碼。這段JavaScript代碼中提供了兩個Demo函數(shù),分別是使用同步、異步對同一個URL進行多次請求。

本次的Ajax框架代碼中沒有關(guān)于實現(xiàn)瀏覽器前進、后退按鈕的處理,如果各位需要,可以從我原來的文章中獲取相應(yīng)的代碼。

聲明:本文中的所有代碼遵守GNU GPLv2的協(xié)議,對代碼進行開源

發(fā)行注記:
2009/06/22
1、取消很多不必要的參數(shù)
2、代碼風格更加面向?qū)ο?BR>3、允許用戶對request請求方式進行設(shè)置(即用戶可以選擇同步或異步執(zhí)行Ajax請求)
4、框架使用閉包封裝
5、改進了程序的執(zhí)行性能

JavaScript代碼中提供了兩個Demo函數(shù),分別是使用同步、異步對同一個URL進行多次請求。

如果各位對這套框架有什么意見或建議,可以直接聯(lián)系我,在代碼的版權(quán)信息內(nèi),有本人的電子郵件地址

  1. /*      
  2. * Copyright © 2008 Nervous Studio, All rights reserved.      
  3. *           
  4. * LICENSE      
  5. *           
  6. * This program is free software; you can redistribute it and/or      
  7. * modify it under the terms of the GNU General Public License (GPL)      
  8. * as published by the Free Software Foundation; either version 2      
  9. * of the License, or (at your option) any later version.      
  10. *      
  11. * This program is distributed in the hope that it will be useful,      
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of      
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.        See the      
  14. * GNU General Public License for more details.      
  15. *           
  16. * To read the license please visit http://www.gnu.org/copyleft/gpl.html      
  17. *           
  18. */   
  19.  
  20. /*      
  21. * @author Steven Wee       
  22. *  @E-Mail:wmkm0113@Hotmail.comweimin0528@139.com   
  23. * @version $Revision: 1.1 $ $Date: 2009/06/21 4:40:00 $      
  24. */      
  25.  
  26. //  Get Elements by input elementId   
  27. function $() {   
  28.   if ( arguments.length <= 0 ) {   
  29.     return null;   
  30.   } else {   
  31.     var returnElements = new Array();   
  32.     var argCount = arguments.length;   
  33.     for ( var i = 0 ; i < argCount ; i++ ) {   
  34.       var element = null;   
  35.       var elementId = arguments[i];   
  36.       if ( typeof elementId == 'string' ) {   
  37.         element = document.getElementById(elementId);   
  38.       }   
  39.       if ( element != null ) {   
  40.         returnElements.push(element);   
  41.       }   
  42.     }   
  43.     return returnElements;   
  44.   }   
  45. }   
  46.  
  47. //  Trim the string spaces at begin and end   
  48. function trim(str){   
  49.   return str.replace(/(^\s*)|(\s*$)/g, "");   
  50. }   
  51.  
  52. function AjaxObject() {   
  53.       
  54.   //  Define url address varibale   
  55.   var url = null;   
  56.       
  57.   //  Define formId varibale   
  58.   var formId = null;   
  59.       
  60.   //  Define bindElementId varibale   
  61.   var bindElementId = null;   
  62.       
  63.   //  Define XMLHTTPRequest object varibale   
  64.   var request = getAjaxObject();   
  65.       
  66.   function setURL(urlAddress) {   
  67.     this.url = urlAddress;   
  68.   }   
  69.       
  70.   function getURL() {   
  71.     return this.url;   
  72.   }   
  73.       
  74.   function setFormId(inputFormId) {   
  75.     this.formId = inputFormId;   
  76.   }   
  77.       
  78.   function getFormId() {   
  79.     return this.formId;   
  80.   }   
  81.       
  82.   function setBindElementId(elementId) {   
  83.     this.bindElementId = elementId;   
  84.   }   
  85.       
  86.   function getBindElementId() {   
  87.     return this.bindElementId;   
  88.   }   
  89.       
  90.   /*   
  91.   *  Get XMLHttpRequest object   
  92.   */   
  93.   function getAjaxObject() {   
  94.     var xmlHttpRequest;   
  95.     //  If XMLHttpRequest is a javascript object in the local   
  96.     if(window.XMLHttpRequest){   
  97.       xmlHttpRequest = new XMLHttpRequest();   
  98.     }else if(window.ActiveXObject){  //  Support the ActiveX   
  99.       try{   
  100.         //  Create XMLHttpRequest object by instance an ActiveXObject   
  101.         xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");  //  higher than msxml3   
  102.       }catch(e){   
  103.         try{   
  104.           //  Create XMLHttpRequest object by instance an ActiveXObject   
  105.           xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");  //  lower than msxml3   
  106.         }catch(e){}   
  107.       }   
  108.     }   
  109.     if ( !xmlHttpRequest ) {   
  110.       alert("Create Ajax object failed!");   
  111.     }   
  112.     return xmlHttpRequest;   
  113.   }   
  114.       
  115.   /*   
  116.   *  Send client request by ajax   
  117.   *  Support 'POST' and 'GET' to submit the form   
  118.   *  Support Asynchronous or Synchronous to send the ajax request   
  119.   */   
  120.   function sendRequestByAjax(syncOption, sendOption) {   
  121.     if ( typeof syncOption == "string" && syncOption.toUpperCase() == "POST" ) {   
  122.             request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");   
  123.     }   
  124.     if ( sendOption ) {   
  125.       request.onreadystatechange = processRequest;   
  126.     }   
  127.     request.open(syncOption, this.url, sendOption);   
  128.     var data = null;   
  129.     //  Format form data   
  130.     if ( this.formId && this.formId.length != 0 ) {   
  131.       var formElement = $(this.formId)[0];   
  132.       data = encodeFormData(formElement);   
  133.     }   
  134.     request.send(data);   
  135.   }   
  136.       
  137.   /*   
  138.   *  Ajax callback function when Synchronous   
  139.   */   
  140.   function processRequest() {   
  141.     if( request.readyState == 4 ){   
  142.       //  Receive the request data finished   
  143.       if( request.status == 200 ){   
  144.         //  Received data success   
  145.         if ( request.responseXML.documentElement != null ) {   
  146.           var xmlDoc = request.responseXML.documentElement;   
  147.           var xmlRoot = xmlDoc.getElementsByTagName("dataType");   
  148.           var dataType = xmlRoot[0].childNodes[0].firstChild.nodeValue;   
  149.           var items = xmlDoc.getElementsByTagName('item');   
  150.           switch ( dataType.toLowerCase() ) {   
  151.             case "array" :   
  152.               //  Return value is resultSet   
  153.               bindItems(items);   
  154.               break;   
  155.             case "string" :   
  156.               //  Return value is string   
  157.               bindText(items[0].childNodes[0].firstChild.nodeValue);   
  158.           }   
  159.         } else {   
  160.           var htmlCode = request.responseText;   
  161.           bindText(htmlCode);   
  162.         }   
  163.       } else {   
  164.         //  Received data error   
  165.         alert("Not able to retrieve description " + request.statusText);   
  166.       }   
  167.     }   
  168.   }   
  169.       
  170.   /*   
  171.   *  Ajax callback function when Synchronous   
  172.   */   
  173.   function processRequestWhenSync() {   
  174.     if ( request.responseXML.documentElement != null ) {   
  175.       var xmlDoc = request.responseXML.documentElement;   
  176.       var xmlRoot = xmlDoc.getElementsByTagName("dataType");   
  177.       var dataType = xmlRoot[0].childNodes[0].firstChild.nodeValue;   
  178.       var items = xmlDoc.getElementsByTagName('item');   
  179.       switch ( dataType.toLowerCase() ) {   
  180.         case "array" :   
  181.           //  Return value is resultSet   
  182.           bindItems(items);   
  183.           break;   
  184.         case "string" :   
  185.           //  Return value is string   
  186.           bindText(items[0].childNodes[0].firstChild.nodeValue);   
  187.       }   
  188.     } else {   
  189.       var htmlCode = request.responseText;   
  190.       bindText(htmlCode);   
  191.     }   
  192.   }   
  193.       
  194.   //  Send request by ajax as Synchronous and medthod is GET   
  195.   function getWithSync() {   
  196.     sendRequestByAjax("GET"false);   
  197.     //  Operate request data   
  198.     processRequestWhenSync();   
  199.   }   
  200.       
  201.   //  Send request by ajax as Asynchronous and medthod is GET   
  202.   function getWithAsync() {   
  203.     sendRequestByAjax("GET"true);   
  204.   }   
  205.       
  206.   //  Send request by ajax as Synchronous and medthod is POST   
  207.   function postWithSync() {   
  208.     sendRequestByAjax("POST"false);   
  209.     //  Operate request data   
  210.     processRequestWhenSync();   
  211.   }   
  212.       
  213.   //  Send request by ajax as Asynchronous and medthod is POST   
  214.   function postWithAsync() {   
  215.     sendRequestByAjax("POST"true);   
  216.   }   
  217.       
  218.   /*   
  219.     *  Analyze form elements data   
  220.     *  @param  formElement  FormObject   
  221.     */   
  222.   function encodeFormData(formElement) {   
  223.     var whereClause = "";   
  224.     var and = "";   
  225.     var elementCount = formElement.length;   
  226.     for ( i = 0 ; i < elementCount ; i++ ) {   
  227.       var element = formElement[i];   
  228.       if ( element.name != "" ) {   
  229.         if (element.type=='select-one') {   
  230.           element_value = element.options[element.selectedIndex].value;   
  231.         } else if ( element.type == 'checkbox' || element.type == 'radio' ) {   
  232.           if ( element.checked == false ) {   
  233.             break;      
  234.           }   
  235.           element_value = trim(element.value);   
  236.         } else {   
  237.           element_value = trim(element.value);   
  238.         }   
  239.         whereClause += and + trim(element.name) + '=' + element_value.replace(/\&/g,"%26");   
  240.         and = "&"   
  241.       }   
  242.     }   
  243.     return whereClause;   
  244.   }   
  245.       
  246.   /*   
  247.     *  Bind text value   
  248.     */   
  249.   function bindText(value) {   
  250.     var elem = $(this.bindElementId)[0];   
  251.     //  Analyze object classification   
  252.     switch ( elem.tagName.toLowerCase() ) {   
  253.     case "div":   
  254.     case "span":   
  255.     case "textarea":   
  256.       elem.innerHTML += value;   
  257.       break;   
  258.     case "input":   
  259.       elem.value = value;   
  260.       break;   
  261.       default:   
  262.         alert("Can't bind data to element!");   
  263.         return false;   
  264.     }   
  265.     return true;   
  266.   }   
  267.  
  268.   /*   
  269.     *  Bind resultSet   
  270.     */   
  271.   function bindItems(items) {   
  272.     var elem = $(this.bindElementId)[0];   
  273.     //  Check the bind object is support   
  274.     if ( elem.tagName.toLowerCase() != "select" && elem.tagName.toLowerCase() != "ul" ) {   
  275.       alert("Can't bind data to element!");   
  276.       return;   
  277.     }   
  278.     //  Bind data to select   
  279.     if ( elem.tagName.toLowerCase() == "select" ) {   
  280.       var childCount = elem.childNodes.length;   
  281.       while ( childCount > 0 ) {   
  282.         //  Clear all values when the values is exists   
  283.         elem.removeChild(elem.childNodes[0]);   
  284.         childCount--;   
  285.       }   
  286.       // Bind data      
  287.       var itemCount = items.length;   
  288.       for ( var i = 0; i < itemCount; i++ ) {   
  289.         var option = document.createElement("OPTION");   
  290.         var Data = items[i];   
  291.            
  292.         option.value = Data.childNodes[0].firstChild.nodeValue;   
  293.         option.text = Data.childNodes[1].firstChild.nodeValue;   
  294.            
  295.         elem.options.add(option);   
  296.       }   
  297.     } else if ( elem.tagName.toLowerCase() == "ul" ) {   
  298.       //  Bind data to ul   
  299.       elem.innerHTML = "";   
  300.       // bind data   
  301.       var itemCount = items.length;   
  302.       for ( var i = 0; i < itemCount; i++ ) {   
  303.         var Data = items[i];   
  304.         var urlAddress = Data.childNodes[0].firstChild.nodeValue;   
  305.         var showText = Data.childNodes[1].firstChild.nodeValue;   
  306.         var innerCode = "
  307.  + urlAddress + "\" title=\"" + showText + "\">" + showText + "";   
  308.         elem.innerHTML += innerCode;   
  309.       }   
  310.     }   
  311.     return true;   
  312.   }   
  313.       
  314.   /*   
  315.   *  Submit form as Ajax   
  316.   *  @param  syncStatus:  true-Send ajax request by Asynchronous  false-Send ajax request by Synchronous   
  317.   * @param  formId:      the id is where form will submit   
  318.   *  @param  elementId:  the return value will bind for this element   
  319.   *   
  320.   */   
  321.   this.submitForm = function(syncStatus, formId, elementId) {   
  322.     var formElement = $(formId)[0];   
  323.     if ( formElement ) {   
  324.       setURL(formElement.getAttributeNode("action").value);   
  325.       setFormId(formId);   
  326.       setBindElementId(elementId);   
  327.       if ( syncStatus ) {   
  328.         if ( formElement.medthod.toUpperCase() == "POST" ) {   
  329.           postWithSync();   
  330.         } else if ( formElement.medthod.toUpperCase() == "GET" ) {   
  331.           getWithSync();   
  332.         } else {   
  333.           alert("Form medthod was not support! The form medthod is: " + formElement.medthod);   
  334.         }   
  335.       } else {   
  336.         if ( formElement.medthod.toUpperCase() == "POST" ) {   
  337.           postWithAsync();   
  338.         } else if ( formElement.medthod.toUpperCase() == "GET" ) {   
  339.           getWithAsync();   
  340.         } else {   
  341.           alert("Form medthod was not support! The form medthod is: " + formElement.medthod);   
  342.         }   
  343.       }   
  344.     } else {   
  345.       alert("Form is undefined!");   
  346.     }   
  347.   }   
  348.       
  349.   /*   
  350.   *  Get url address data as Ajax   
  351.   *  @param  syncStatus:  true-Send ajax request by Asynchronous  false-Send ajax request by Synchronous   
  352.   * @param  urlAddress:  the request url   
  353.   *  @param  elementId:  the return value will bind for this element   
  354.   *   
  355.   */   
  356.   this.getData = function(syncStatus, urlAddress, elementId) {   
  357.     setURL(urlAddress);   
  358.     setBindElementId(elementId);   
  359.     if ( syncStatus ) {   
  360.       getWithAsync();   
  361.     } else {   
  362.       getWithSync();   
  363.     }   
  364.   }   
  365. }   
  366.  
  367. //  Demo for request more times   
  368. function testRequestAsync() {   
  369.   /*   
  370.   *  request by Asynchronous   
  371.   */   
  372.   var ajaxRequest = new AjaxObject();   
  373.   var count = 10;   
  374.   var i = 0;   
  375.   while( i < count ) {   
  376.     ajaxRequest.getData(false"http://www.google.com/""test");   
  377.     i++;   
  378.   }   
  379. }   
  380.  
  381. //  Demo for request more times   
  382. function testRequestSync() {   
  383.   /*   
  384.   *  request by Synchronous   
  385.   */   
  386.   var count = 10;   
  387.   var i = 0;   
  388.   while( i < count ) {   
  389.     var ajaxRequest = new AjaxObject();   
  390.     ajaxRequest.getData(false"http://www.google.com/""test");   
  391.     i++;   
  392.   }   
  393. }  

以上就是這個通用Ajax框架的源代碼。本文出自 “玄武·巴依” 博客。

【編輯推薦】

  1. 流行的AJAX框架對比:jQuery,Mootools,Dojo,Ext JS
  2. ASP.NET AJAX框架調(diào)用后臺代碼的基本方法
  3. 詳解如何實現(xiàn)最基本的AJAX框架
  4. WCF初試 用JQuery實現(xiàn)loading的功能
  5. 學習jQuery必須知道的幾種常用方法
責任編輯:yangsai 來源: 51CTO博客
相關(guān)推薦

2025-09-30 07:16:59

2021-03-29 11:20:39

前端代碼工作流

2021-08-17 05:57:56

數(shù)據(jù)分析數(shù)據(jù)分析師工具

2025-02-27 10:25:35

組件庫MatBlazorWeb

2020-10-19 10:35:43

iOS設(shè)備尺寸

2018-08-31 08:42:48

LinuxUnix實用程序

2023-03-03 17:00:00

部署Linux內(nèi)核

2014-12-02 10:02:21

Android異步任務(wù)

2019-10-11 15:58:25

戴爾

2021-05-27 07:12:19

單點登錄系統(tǒng)

2024-12-09 09:25:30

2025-04-07 07:45:00

AI模型神經(jīng)網(wǎng)絡(luò)

2024-02-20 08:56:50

JavaScript模塊打包器

2010-06-09 17:00:43

UML試題

2016-06-07 14:25:50

逆向思維JS框架需求

2016-06-06 13:55:53

JS框架符合實際需求

2024-11-19 16:31:23

2024-11-12 08:13:09

2022-02-25 09:00:00

數(shù)據(jù)科學工具架構(gòu)

2020-12-08 08:12:14

SQL腳本行轉(zhuǎn)列
點贊
收藏

51CTO技術(shù)棧公眾號

丁香五六月婷婷久久激情| 韩国成人在线视频| 国产一区二区日韩| 三级av免费看| 黄频免费在线观看| 久久久影视传媒| 91色在线视频| 中文字幕亚洲乱码熟女1区2区| 日韩精品dvd| 亚洲第一色在线| 国产一级特黄a大片免费| 99在线播放| 国产亚洲一区字幕| 99精彩视频| 国产日韩久久久| 海角社区69精品视频| 亚洲色图欧美制服丝袜另类第一页 | 色婷婷综合视频| 美腿丝袜亚洲三区| 欧美一级视频免费在线观看| 国产jizz18女人高潮| 日本午夜精品久久久| 欧美日韩一本到| bt天堂新版中文在线地址| 天天干天天爱天天操| 狠狠色丁香久久婷婷综合_中| 国外色69视频在线观看| 日本裸体美女视频| 亚洲免费毛片| 亚洲成人久久网| 女人高潮一级片| 黑人巨大亚洲一区二区久| 亚洲激情成人在线| 一区二区三区四区五区精品 | 国产东北露脸精品视频| 国产精品无av码在线观看| 国产中文字字幕乱码无限| 四虎8848精品成人免费网站| 亚洲精品理论电影| 欧美午夜精品一区二区| 日韩有码欧美| 欧美中文字幕一区二区三区亚洲| 拔插拔插海外华人免费| 50度灰在线| 亚洲欧美日韩系列| 在线成人性视频| 一本一道波多野毛片中文在线| 91麻豆国产香蕉久久精品| 国产精品大全| 亚洲第一页在线观看| 精品中文字幕一区二区| 国产精品日韩在线观看| 亚洲精品男人的天堂| 中日韩男男gay无套| 欧美精品18videos性欧| 久草视频免费在线播放| 欧美日本一区二区高清播放视频| 久久亚洲欧美日韩精品专区| 一级性生活免费视频| 国产精品99一区二区三| www亚洲欧美| 女人18毛片毛片毛片毛片区二| 日本a级不卡| 久久精品99久久香蕉国产色戒| 亚洲激情图片网| 91影院成人| 不卡中文字幕av| 看片网站在线观看| 亚洲国产一区二区精品专区| 久久久久久久999| 日韩精品成人在线| 久久精品综合| 国产精品美女www爽爽爽视频| 最新中文字幕一区| 蜜臀av在线播放一区二区三区| 国产精品免费久久久久久| 老熟妇一区二区三区啪啪| 美腿丝袜亚洲色图| 成人91视频| 亚洲人视频在线观看| 久久久久久久久久久久久久久99| 色视频一区二区三区| 日韩子在线观看| 亚洲精品久久嫩草网站秘色| 国产日本在线播放| 欧美男体视频| 欧美男男青年gay1069videost| 少妇性l交大片7724com| 精品少妇3p| 国产亚洲视频中文字幕视频| fc2ppv在线播放| 亚洲激情专区| 国产精品一区二区三区成人| 国产喷水福利在线视频| 国产一二三精品| 麻豆一区区三区四区产品精品蜜桃| 国产一区二区影视| 亚洲美女屁股眼交| 国产免费一区二区三区视频| 国产精品99精品一区二区三区∴| 欧美日韩成人在线| 欧美xxxxx精品| 久久视频精品| 久久久久久久久久久免费| 日韩综合在线观看| 国产a级毛片一区| 日本一区二区精品| 国产99re66在线视频| 在线亚洲一区二区| 国产一卡二卡三卡四卡| 精品国产乱码久久久久久果冻传媒 | 国产欧美一区二区三区在线| 国产 欧美 精品| 国产精品短视频| 99蜜桃臀久久久欧美精品网站| 日韩三区四区| 国产亚洲视频在线| 日韩精品1区2区| 国产一区二区三区精品视频| 欧美18视频| 丰满的护士2在线观看高清| 欧美丝袜自拍制服另类| 亚洲熟女乱综合一区二区三区| 999久久久91| 国产成人精品av在线| 丰满人妻一区二区三区四区53| 亚洲国产成人自拍| 亚洲乱码中文字幕久久孕妇黑人| 欧美日韩黄色| 日韩在线观看网址| 自拍偷拍色综合| 久久综合九色欧美综合狠狠| av 日韩 人妻 黑人 综合 无码| 69堂免费精品视频在线播放| 日韩电视剧在线观看免费网站 | 亚洲电影一级黄| 超碰在线超碰在线| 91一区二区三区四区| 国产精品久久久久av| 青青草观看免费视频在线 | 永久免费看mv网站入口亚洲| 日本一区二区免费电影| 97精品电影院| 五十路熟女丰满大屁股| 视频二区欧美| 色综合久久中文字幕综合网小说| 国产一区二区女内射| 国产精品久久久一区麻豆最新章节| 女人另类性混交zo| 国产精品入口久久| 清纯唯美日韩制服另类| 日韩欧美亚洲系列| 一本久久精品一区二区| 精品无码人妻一区| 视频一区二区国产| 视频一区国产精品| 国产欧美自拍| www.xxxx欧美| 国产日韩在线观看一区| 亚洲精品成人精品456| 1314成人网| 欧美日韩网站| 国产美女精品在线观看| 超碰97国产精品人人cao| 欧美精品一区二区蜜臀亚洲| 国产亚洲精品女人久久久久久| 成人h动漫精品一区二区| 337p粉嫩大胆噜噜噜鲁| 国产精品亚洲二区| 国产日韩精品一区二区| av激情在线| 亚洲国产91精品在线观看| 男女啊啊啊视频| 国产午夜精品久久| 蜜桃福利午夜精品一区| 国产精品红桃| 欧美一区亚洲二区| 99re8精品视频在线观看| 欧美高清自拍一区| 裸体xxxx视频在线| 91精品国产一区二区| 久久丫精品久久丫| 久久精品人人做人人爽人人| 中文字幕免费高清在线| 欧美精品午夜| 免费在线观看一区二区| 国产福利91精品一区二区| 九九热在线精品视频| 欧美男男同志| 日韩一级黄色片| www.中文字幕在线观看| 国产精品你懂的| 少妇精品无码一区二区三区| 日本中文字幕一区二区视频| 色哟哟免费网站| 蜜桃精品wwwmitaows| 91在线免费观看网站| 香蕉伊大人中文在线观看| 久久精品国产一区二区三区| 全部免费毛片在线播放一个| 欧美视频在线播放| www.天天色| 中文字幕亚洲精品在线观看| 秘密基地免费观看完整版中文| 日韩和欧美的一区| 日韩精品一区在线视频| 三级电影一区| 麻豆久久久9性大片| 国产精久久久| 国产精品久久久久av免费| 黄色羞羞视频在线观看| www.日韩视频| 国产三级在线免费观看| 精品国产一区二区三区不卡| 亚洲熟妇无码久久精品| 激情成人中文字幕| 538精品在线观看| 国产精品国产三级国产aⅴ中文| 精品国产av色一区二区深夜久久| 精品一二三四在线| 欧美精品一区二区三区免费播放| 欧美激情综合色综合啪啪| 亚洲国产精品久久久久婷婷老年| 麻豆精品99| 99蜜桃在线观看免费视频网站| 国产成人精品一区二区三区免费| 欧美在线视频观看| a天堂资源在线| 欧美日韩xxxxx| 国产美女在线观看| 日韩亚洲综合在线| av在线三区| 伊人一区二区三区久久精品| 天天干视频在线观看| 亚洲成人网av| 粉嫩av一区二区夜夜嗨| 日韩欧美中文一区| 国产黄色大片网站| 日韩欧美一卡二卡| 国产农村妇女毛片精品| 欧美人伦禁忌dvd放荡欲情| 中文字幕精品无码亚| 在线亚洲欧美专区二区| 色老头在线视频| 色94色欧美sute亚洲13| 好看的av在线| 一本久久综合亚洲鲁鲁五月天| 91精品国产乱码在线观看| 亚洲成人av免费| 国产精品theporn动漫| 亚洲午夜电影网| 亚欧洲精品在线视频| 午夜婷婷国产麻豆精品| 日韩黄色三级视频| 色综合久久久久综合99| 在线精品免费视| 欧美视频中文字幕| 国产精品女人久久久| 91精品在线免费| 精品人妻无码一区二区| 精品国免费一区二区三区| 老牛影视av牛牛影视av| 亚洲精品电影网在线观看| 亚洲av成人精品一区二区三区在线播放 | 伊人成色综合网| 欧美亚洲一级| 免费涩涩18网站入口| 久久精品国产久精国产爱| 天天色天天综合网| 国产福利一区二区三区视频| 日韩成人av影院| 91蝌蚪国产九色| 美国黄色特级片| 亚洲色图一区二区| 国产午夜精品无码| 色哦色哦哦色天天综合| 成人黄色免费网| 日韩欧美一级在线播放| 色婷婷综合视频| 中文字幕欧美专区| 3d玉蒲团在线观看| 欧美自拍视频在线观看| 欧美国产日韩电影| www.久久久| 久久91麻豆精品一区| 亚洲免费精品视频| 亚洲午夜精品久久久久久app| 日韩av资源在线| 国产一区二区在线观看视频| 亚洲欧洲国产视频| 91色九色蝌蚪| 成人免费毛片xxx| 黄色一区二区在线观看| 91丨九色丨蝌蚪丨对白| 亚洲国产精彩中文乱码av在线播放| 国产精品四虎| 久久久久亚洲精品成人网小说| 筱崎爱全乳无删减在线观看| 国产欧美日韩免费看aⅴ视频| 懂色av一区二区| 日韩精品久久久毛片一区二区| 欧美国产高潮xxxx1819| 国产精品人人妻人人爽人人牛| 久久精品国产精品亚洲红杏 | 久久影音资源网| 69xx绿帽三人行| 色狠狠综合天天综合综合| 国产三级视频在线播放| 亚洲美女在线观看| 牛牛精品视频在线| 国产日韩在线视频| 奇米影视777在线欧美电影观看| 中文字幕一区二区三区四区五区| 国产精品日本欧美一区二区三区| 爽爽爽在线观看| 国产日韩欧美精品电影三级在线 | 欧美日韩一区二区国产| 黄色一级免费大片| 成人av网站免费观看| 免费看的黄色录像| 色综合久久99| 性xxxxbbbb| 欧美极品在线播放| 秋霞一区二区| 国产日韩视频在线播放| 日本欧美一区二区| 欧美老熟妇乱大交xxxxx| 亚洲成a人片综合在线| 国产熟女一区二区三区五月婷| 在线观看日韩欧美| 色8久久影院午夜场| 精品无人区一区二区三区竹菊| 欧美久久一区| 污免费在线观看| 亚洲美女在线国产| 99这里有精品视频| 久久精品国产91精品亚洲| 澳门av一区二区三区| 欧美成人综合一区| 久久国产精品毛片| 欧美老熟妇乱大交xxxxx| 午夜精品在线视频一区| 全部免费毛片在线播放一个| 久久久久久久久久国产| 国产精品美女在线观看直播| 久久福利一区二区| 高清免费成人av| 久久在线视频精品| 亚洲国产成人久久综合| √天堂8资源中文在线| 黑人中文字幕一区二区三区| 亚洲精品孕妇| 亚洲第九十七页| 欧美性猛交xxxx免费看漫画| 婷婷五月综合激情| 5278欧美一区二区三区| 你懂的一区二区三区| 午夜激情福利在线| 国产精品高潮久久久久无| 91精品国产乱码久久久久| 久久亚洲欧美日韩精品专区 | 欧美视频在线一区| 免费在线视频欧美| 亚洲自拍中文字幕| 黄色成人在线网址| 亚洲专区区免费| 欧美体内she精视频| 久久99精品久久久久久野外| 91原创国产| 午夜影院日韩| 亚洲色图欧美色| 日韩欧美电影在线| 亚洲优女在线| 亚洲一区不卡在线| 国产黄色91视频| 视频一区二区三区四区五区| 亚洲视频电影图片偷拍一区| 日韩午夜视频在线| 69sex久久精品国产麻豆| 99精品国产视频| 中文字幕第一页在线播放| 九九热这里只有精品免费看| 亚洲性视频大全| www.色就是色.com| 天天操天天干天天综合网| 国产在线黄色| 91精品国自产在线观看| 亚洲一区不卡| 日韩在线视频网址| 亚洲国产成人精品女人久久久 | 成人av电影天堂| 国产欧美成人| av黄色免费在线观看| 精品对白一区国产伦| www.久久.com| www在线观看免费| 国产精品国产a| 青青草免费在线| 国产91免费视频| 蜜臀99久久精品久久久久久软件|