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

用Dojo實(shí)現(xiàn)Ajax請(qǐng)求:XHR、跨域、及其他

開(kāi)發(fā) 后端
在任何瀏覽器上方便地實(shí)現(xiàn)Ajax請(qǐng)求是每一個(gè)Ajax框架的初衷。Dojo在這方面無(wú)疑提供了非常豐富的支持。除了XMLHttpRequest之外,動(dòng)態(tài)script、iframe、RPC也應(yīng)有盡有,并且接口統(tǒng)一,使用方便,大多數(shù)情況下都只需要一句話就能達(dá)到目的,從而免除重復(fù)造輪子的麻煩。

在任何瀏覽器上方便地實(shí)現(xiàn)Ajax請(qǐng)求是每一個(gè)Ajax框架的初衷。Dojo在這方面無(wú)疑提供了非常豐富的支持。除了XMLHttpRequest之外,動(dòng)態(tài)script、iframe、RPC也應(yīng)有盡有,并且接口統(tǒng)一,使用方便,大多數(shù)情況下都只需要一句話就能達(dá)到目的,從而免除重復(fù)造輪子的麻煩。而且,Dojo一貫追求的概念完整性也在這里有所體現(xiàn),換句話說(shuō),在使用Dojo的Ajax工具的過(guò)程中不會(huì)感到任何的不自然,相反更容易有觸類旁通的感覺(jué),因?yàn)锳PI的模式是統(tǒng)一的,而且這里涉及到的某些概念(如Deferred對(duì)象)也貫穿在整個(gè)Dojo之中。

Dojo的XHR函數(shù)

Dojo的XMLHttpRequest函數(shù)就叫dojo.xhr,除了把自己取名美元符號(hào)之外,這好像是最直接的辦法了。它定義在Dojo基本庫(kù)里,所以不需要額外的require就能使用。它可以實(shí)現(xiàn)任何同域內(nèi)的http請(qǐng)求。不過(guò)更常用的是dojo.xhrGet和dojo.xhrPost,它們只不過(guò)是對(duì)dojo.xhr函數(shù)的簡(jiǎn)單封裝;當(dāng)然根據(jù)REST風(fēng)格,還有dojo.xhrPut和dojo.xhrDelete。

這些函數(shù)的參數(shù)都很統(tǒng)一。除了dojo.xhr的第一個(gè)參數(shù)是http方法名之外,所有的dojo.xhr*系列函數(shù)都接受同一種散列式的參數(shù),其中包含請(qǐng)求的細(xì)節(jié),例如url、是否同步、要傳給服務(wù)器的內(nèi)容(可以是普通對(duì)象、表單、或者純文本)、超時(shí)設(shè)定、返回結(jié)果的類型(非常豐富且可擴(kuò)展)、以及請(qǐng)求成功和失敗時(shí)的回調(diào)。所有dojo.xhr*函數(shù)(實(shí)際上是所有IO函數(shù))返回值也都一樣,都是一個(gè)Deferred對(duì)象,顧名思義,它能讓一些事情“延遲”發(fā)生,從而讓API用起來(lái)更靈活。

下面的兩個(gè)例子可能會(huì)帶來(lái)一點(diǎn)直觀感受:

  1. dojo.xhrGet({  
  2.     url: "something.html",  
  3.     load: function(response, ioArgs){  
  4.         //用response干一些事  
  5.         console.log("xhr get success:", response);  
  6.     return response; //必須返回response  
  7.     },  
  8.     error: function(response, ioArgs){  
  9.         console.log("xhr get failed:", response);  
  10.         return response; //必須返回response  
  11.     }  
  12. });  
  13. //Deferred對(duì)象允許用同步調(diào)用的寫法寫異步調(diào)用  
  14. var deferredResult = dojo.xhrPost({  
  15.     url: "something.html",  
  16.     form: formNode, //Dojo會(huì)自動(dòng)將form轉(zhuǎn)成object  
  17.     timeout: 3000, //Dojo會(huì)保證超時(shí)設(shè)定的有效性  
  18.     handleAs: "json" //得到的response將被認(rèn)為是JSON,并自動(dòng)轉(zhuǎn)為object  
  19. });  
  20. //當(dāng)響應(yīng)結(jié)果可用時(shí)再調(diào)用回調(diào)函數(shù)  
  21. deferredResult.then(function(response){  
  22.     console.log("xhr get success:", response);  
  23.     return response; //必須返回response  
  24. }); 

首先解釋一下timeout。除了IE8之外,目前大多數(shù)XMLHttpRequest對(duì)象都沒(méi)有內(nèi)置的timeout功能,因此必須用 setTimeout。當(dāng)同時(shí)存在大量請(qǐng)求時(shí),需要為每一個(gè)請(qǐng)求設(shè)置單獨(dú)的定時(shí)器,這在某些瀏覽器(主要是IE)會(huì)造成嚴(yán)重的性能問(wèn)題。dojo的做法是只用一個(gè)單獨(dú)的setInterval,定時(shí)輪詢(間隔50ms)所有還未結(jié)束的請(qǐng)求的狀態(tài),這樣就高效地解決了一切遠(yuǎn)程請(qǐng)求(包括JSONP和 iframe)的超時(shí)問(wèn)題。

值得一提的還有handleAs參數(shù),通過(guò)設(shè)置這個(gè)參數(shù),可以自動(dòng)識(shí)別服務(wù)器的響應(yīng)內(nèi)容格式并轉(zhuǎn)換成對(duì)象或文本等方便使用的形式。根據(jù)文檔,它接受如下值:text (默認(rèn)), json, json-comment-optional, json-comment-filtered, javascript, xml。

而且它還是可擴(kuò)展的。其實(shí)handleAs只是告訴xhr函數(shù)去調(diào)用哪個(gè)格式轉(zhuǎn)換插件,即dojo.contentHandlers對(duì)象里的一個(gè)方法。例如 dojo.contentHandlers.json就是處理JSON格式的插件。你可以方便地定制自己所需要的格式轉(zhuǎn)換插件,當(dāng)然,你也可修改現(xiàn)有插件的行為:

  1. dojo.contentHandlers.json = (function(old){  
  2.     return function(xhr){  
  3.         var json = old(xhr);  
  4.         if(json.someSignalFormServer){  
  5.             doSomthing(json);  
  6.             delete json.someSignalFormServer;  
  7.         }  
  8.         return json;  
  9.     }  
  10. })(dojo.contentHandlers.json);//一個(gè)小技巧,利用傳參得到原方法 

虛擬的參數(shù)類

這里特別提一下Dojo在API設(shè)計(jì)上的兩個(gè)特點(diǎn)。其一是虛擬的參數(shù)“類”概念:通過(guò)利用javascript對(duì)象可以靈活擴(kuò)展的特點(diǎn),強(qiáng)行規(guī)定一個(gè)散列參數(shù)屬于某個(gè)“類”。例如dojo.xhr*系列函數(shù)所接受的參數(shù)就稱為dojo.__XhrArgs。這個(gè)“類”并不存在于實(shí)際代碼中(不要試圖用 instanceof驗(yàn)證它),只停留在概念上,比抽象類還抽象,因此給它加上雙下劃線前綴(Dojo習(xí)慣為抽象類加單下劃線前綴)。這樣做看起來(lái)沒(méi)什么意思,但實(shí)際上簡(jiǎn)化了API,因?yàn)樗笰PI之間產(chǎn)生了聯(lián)系,更容易記憶也就更易于使用。這一點(diǎn)在對(duì)這種類做“繼承”時(shí)更明顯。例如 dojo.__XhrArgs繼承自dojo.__IoArgs,這是所有IO函數(shù)所必須支持的參數(shù)集合,同樣繼承自dojo.__IoArgs的還有 dojo.io.script.__ioArgs和dojo.io.iframe.__ioArgs,分別用于動(dòng)態(tài)腳本請(qǐng)求和iframe請(qǐng)求。子類只向父類添加少量的屬性,這樣繁多的參數(shù)就具有了樹形類結(jié)構(gòu)。原本散列式參數(shù)是用精確的參數(shù)名代替了固定的參數(shù)順序,在增加靈活性和可擴(kuò)展性的同時(shí),實(shí)際上增加了記憶量(畢竟參數(shù)名不能拼錯(cuò)),使得API都不像看起來(lái)那么好用,有了參數(shù)類的設(shè)計(jì)就緩解了這個(gè)問(wèn)題。

這種參數(shù)類的做法在Dojo里隨處可見(jiàn),讀源碼的話就會(huì)發(fā)現(xiàn)它們都是被正兒八經(jīng)地以正常代碼形式聲明在一種特殊注釋格式里的,像這樣:

  1. /*=====  
  2. dojo.declare("dojo.__XhrArgs", dojo.__IoArgs, {  
  3.     constructor: function(){  
  4.     //summary:  
  5.     //...  
  6.     //handleAs:  
  7.     //...  
  8.     //......  
  9.     }  
  10.  });  
  11.  =====*/ 

這種格式可以被jsDoc工具自動(dòng)提取成文檔,在文檔里這些虛擬出來(lái)的類就像真的類一樣五臟俱全了。

Deferred對(duì)象

另一個(gè)API設(shè)計(jì)特點(diǎn)就是Deferred對(duì)象的廣泛使用。Dojo里的Deferred是基于MochiKit實(shí)現(xiàn)稍加改進(jìn)而成的,而后者則是受到 python的事件驅(qū)動(dòng)網(wǎng)絡(luò)工具包Twisted里同名概念的啟發(fā)。概括來(lái)說(shuō)的話,這個(gè)對(duì)象的作用就是將異步IO中回調(diào)函數(shù)的聲明位置與調(diào)用位置分離,這樣在一個(gè)異步IO最終完成的地方,開(kāi)發(fā)人員可以簡(jiǎn)單地說(shuō)“貨已經(jīng)到了,想用的可以來(lái)拿了”,而不用具體地指出到底該調(diào)用哪些回調(diào)函數(shù)。這樣做的好處是讓異步IO的寫法和同步IO一樣(對(duì)數(shù)據(jù)的處理總是在取數(shù)據(jù)函數(shù)的外面,而不是里面),從而簡(jiǎn)化異步編程。

具體做法是,異步函數(shù)總是同步地返回一個(gè)代理對(duì)象(這就是Deferred對(duì)象),可以將它看做你想要的數(shù)據(jù)的代表,它提供一些方法以添加回調(diào)函數(shù),當(dāng)數(shù)據(jù)可用時(shí),這些回調(diào)函數(shù)(可以由很多個(gè))便會(huì)按照添加順序依次執(zhí)行。如果在取數(shù)據(jù)過(guò)程中出現(xiàn)錯(cuò)誤,就會(huì)調(diào)用所提供的錯(cuò)誤處理函數(shù)(也可以有很多個(gè));如果想要取消這個(gè)異步請(qǐng)求,也可通過(guò)Deferred對(duì)象的cancel方法完成。

dojo.Deferred的核心方法如下:

  1. then(callback, errback); //添加回調(diào)函數(shù)  
  2. callback(result); //表示異步調(diào)用成功完成,觸發(fā)回調(diào)函數(shù)  
  3. errback(error); //表示異步調(diào)用中產(chǎn)生錯(cuò)誤,觸發(fā)錯(cuò)誤處理函數(shù)  
  4. cancel(); //取消異步調(diào)用 

Dojo還提供了一個(gè)when方法,使同步的值和異步的Deferred對(duì)象在使用時(shí)寫法一樣。例如:

  1. //某個(gè)工具函數(shù)的實(shí)現(xiàn)  
  2. var obj = {  
  3.     getItem: function(){  
  4.         if(this.item){  
  5.             return this.item; //這里同步地返回?cái)?shù)據(jù)  
  6.         }else{  
  7.             return dojo.xhrGet({  //這里返回的是Deferred對(duì)象  
  8.                 url: "toGetItem.html",  
  9.                 load: dojo.hitch(thisfunction(response){  
  10.                     this.item = response;  
  11.                     return response;  
  12.                 })  
  13.             });  
  14.         }  
  15.     }  
  16. };  
  17. //用戶代碼  
  18. dojo.when(obj.getItem(), function(item){  
  19.     //無(wú)論同步異步,使用工具函數(shù)getItem的方式都一樣  
  20. }); 

在函數(shù)閉包的幫助下,Deferred對(duì)象的創(chuàng)建和使用變得更為簡(jiǎn)單,你可以輕易寫出一個(gè)創(chuàng)建Deferred對(duì)象的函數(shù),以同步的寫法做異步的事。例如寫一個(gè)使用store獲取數(shù)據(jù)的函數(shù):

  1. var store = new dojo.data.QueryReadStore({...});  
  2. function getData(start, count){  
  3.     var d = new dojo.Deferred(); //初始化一個(gè)Deferred對(duì)象  
  4.     store.fetch({  
  5.         start: start,  
  6.         count: count,  
  7.         onComplete: function(items){  
  8.             //直接取用上層閉包里的Deferred對(duì)象  
  9.             d.callback(items);   
  10.         }  
  11.     });  
  12.     return d; //把它當(dāng)做結(jié)果返回  

#p#

用dojo.io.script跨域

dojo.xhr* 只是XmlHttpRequest對(duì)象的封裝,由于同源策略限制,它不能發(fā)跨域請(qǐng)求,要跨域還是需要?jiǎng)討B(tài)創(chuàng)建<script>標(biāo)簽。Dojo 沒(méi)有像JQuery一樣把所有東西都封裝在一起(JQuery的ajax()方法可以跨域,當(dāng)然用的是JSONP,所以它不敢把自己稱為xhr),而是堅(jiān)持一個(gè)API只干一件事情。畢竟在大部分應(yīng)用中,同域請(qǐng)求比跨域請(qǐng)求多得多,如果一個(gè)應(yīng)用不需要跨域,就沒(méi)必要加載相關(guān)代碼。因此與xhr不同,dojo 的跨域請(qǐng)求組件不在基本庫(kù),而在核心庫(kù),需要require一下才能使用: 

  1. dojo.require("dojo.io.script");  

這個(gè)包里面基本上只需要用到一個(gè)函數(shù):dojo.io.script.get()。它也返回Deferred對(duì)象,并接受類型為 dojo.io.script.__ioArgs的散列參數(shù)。受益于虛擬參數(shù)類,我們不用從頭開(kāi)始學(xué)習(xí)這個(gè)參數(shù),它繼承了dojo.__IoArgs,因此和dojo.xhr*系列的參數(shù)大同小異。唯一需要注意的是handleAs在這里無(wú)效了,代之以jsonp或者checkString。

前者用于實(shí)現(xiàn)JSONP協(xié)議,其值由服務(wù)器端指定,當(dāng)script標(biāo)簽加載后就按照J(rèn)SONP協(xié)議執(zhí)行這個(gè)函數(shù),然后Dojo會(huì)自動(dòng)介入,負(fù)責(zé)把真正的數(shù)據(jù)傳給load函數(shù)。需要指出的是在Dojo1.4以前,這個(gè)參數(shù)叫callbackParamName,冗長(zhǎng)但意義明確。畢竟Dojo太早了,它成型的時(shí)候(2005)JSONP這個(gè)詞才剛出現(xiàn)不久。現(xiàn)在callbackParamName還是可用的(為了向后兼容),不過(guò)處于deprecated狀態(tài)。

下面的例子從flickr獲取feed數(shù)據(jù): 

  1. dojo.io.script.get({  
  2.     url: "http://www.flickr.com/services/feeds/photos_public.gne",  
  3.     jsonp: "jsoncallback"//由flickr指定  
  4.     content: {format: "json"},  
  5.     load: function(response){  
  6.         console.log(response);  
  7.         return response;  
  8.     },  
  9.     error: function(response){  
  10.         console.log(response);  
  11.         return response;  
  12.     }  
  13. }); 

與jsonp不同,checkString參數(shù)專門用于跨域獲取javascript代碼,它其實(shí)是那段跨域腳本里的一個(gè)有定義的變量的名字,Dojo會(huì)用它來(lái)判斷跨域代碼是否加載完畢,配合前面提到的timeout機(jī)制就能實(shí)現(xiàn)有效的超時(shí)處理。 

  1. dojo.io.script.get({  
  2.     url: "http://......", //某個(gè)提供腳本的URL  
  3.     checkString: "obj",  
  4.     load: function(response){  
  5.         //腳本加載完畢,可以直接使用其中的對(duì)象了,如obj。  
  6.         Return response;  
  7.     }  
  8. }); 

用dojo.io.iframe傳數(shù)據(jù)

dojo.io 包里還有一個(gè)工具就是iframe,常用于以不刷新頁(yè)面的方式上傳或下載文件。這個(gè)很經(jīng)典的Ajax技巧在Dojo里就是一句 dojo.io.iframe.send({...})。這個(gè)函數(shù)接受dojo.io.iframe.__ioArgs,相比 dojo.__IoArgs,它只多了一個(gè)method參數(shù),用于指定是用GET還是POST(默認(rèn))方法發(fā)送請(qǐng)求。下面的例子就實(shí)現(xiàn)了通過(guò)無(wú)刷新提交表單來(lái)上傳文件: 

  1. dojo.io.iframe.send({  
  2.     form: "formNodeId"//某個(gè)form元素包含本地文件路徑  
  3.     handleAs: "html"//服務(wù)器將返回html頁(yè)面  
  4.     load: onSubmitted, //提交成功  
  5.     error: onSubmitError //提交失敗  
  6. }); 

目前send函數(shù)的handleAs參數(shù)支持html, xml, text, json, 和javascript五種響應(yīng)格式。除了html和xml之外,使用其他格式有一個(gè)比較特別的要求,就是服務(wù)端返回的響應(yīng)必須具有以下格式: 

  1. <html>  
  2.     <head></head>  
  3.     <body>  
  4.         <textarea>真正的響應(yīng)內(nèi)容</textarea>  
  5.     </body>  
  6. </html>  

這是因?yàn)榉?wù)器返回的東西是加載在iframe里的,而只有html頁(yè)面才能在任何瀏覽器里保證成功加載(有個(gè)DOM在,以后取數(shù)據(jù)也方便)。加一個(gè)<textarea>則可以盡量忠實(shí)于原始文本數(shù)據(jù)的格式,而不會(huì)受到html的影響。

試試RPC(遠(yuǎn)程過(guò)程調(diào)用)

如果dojo.xhr*函數(shù)以及Deferred機(jī)制仍然無(wú)法避免代碼的混亂,那RPC可能就是唯一的選擇了。dojo.rpc包提供了基于“簡(jiǎn)單方法描述”語(yǔ)言(SMD)的RPC實(shí)現(xiàn)。SMD的原理類似于WSDL(Web服務(wù)描述語(yǔ)言),不過(guò)是基于JSON的,它定義了遠(yuǎn)程方法的名稱、參數(shù)等屬性,讓 Dojo能創(chuàng)建出代理方法以供調(diào)用。

Dojo提供了兩種方式實(shí)現(xiàn)rpc:XHR和JSONP,分別對(duì)應(yīng)dojo.rpc.JsonService類和dojo.rpc.JsonpService類,用戶可以根據(jù)是否需要跨域各取所需。

一個(gè)簡(jiǎn)單的例子: 

  1. var smdObj = {  
  2.     serviceType: "JSON-RPC",  
  3.     serviceURL: "http://...." 
  4.     methods: [  
  5.         {name: "myFunc", parameters: []}  
  6.     ]  
  7. };  
  8. var rpc = new dojo.rpc.JsonpService(smdObj); //傳入SMD  
  9. var result = rpc.myFunc(); //直接調(diào)用遠(yuǎn)程方法,返回Deferred對(duì)象  
  10. dojo.when(result, function(result){  
  11.     //得到結(jié)果  
  12. }); 

SMD還沒(méi)有一個(gè)被廣泛認(rèn)可的官方標(biāo)準(zhǔn),一直以來(lái)都是Dojo社區(qū)領(lǐng)導(dǎo)著它的發(fā)展,以后這個(gè)模塊也有可能發(fā)生改變,但整個(gè)RPC基本的框架會(huì)保持穩(wěn)定。

結(jié)語(yǔ)

Ajax請(qǐng)求這個(gè)主題太大,本文只能掛一漏萬(wàn)地介紹一點(diǎn)dojo在這方面設(shè)計(jì)和實(shí)現(xiàn)的皮毛,包括基本XHR請(qǐng)求、動(dòng)態(tài)script、iframe請(qǐng)求、以及RPC,并特別強(qiáng)調(diào)了幾個(gè)有Dojo特色的設(shè)計(jì),如timeout機(jī)制、虛擬參數(shù)類、Deferred對(duì)象等。

Dojo由Ajax領(lǐng)域的先驅(qū)們寫就,相信從它的代碼中我們一定能學(xué)到更多的東西。

原文鏈接:http://www.infoq.com/cn/articles/dojo-ajax-xhr

【編輯推薦】

  1. ASP.NET AJAX前景黯淡?jQuery笑而不語(yǔ)
  2. prototype.js的Ajax對(duì)IE8兼容問(wèn)題解決方案
  3. Ajax與IE6緩存問(wèn)題及解決方案
  4. 簡(jiǎn)化開(kāi)發(fā)流程 了解各種Ajax框架的適用性
  5. Ajax安全隱患將成站點(diǎn)定時(shí)炸彈
責(zé)任編輯:陳貽新 來(lái)源: InfoQ
相關(guān)推薦

2021-06-10 18:11:02

Cors跨域Web開(kāi)發(fā)Cors

2023-08-10 10:58:24

2009-09-22 12:22:54

ibmdwLotus

2009-02-12 09:55:22

AjaxMVCDojo

2012-08-13 10:23:33

IBMdW

2022-12-26 00:00:01

Go框架前端

2009-02-18 09:30:10

AJAX跨域XML

2017-05-25 09:45:35

2024-08-28 08:45:22

2012-03-27 15:23:15

JSONPAJAX

2021-06-15 07:32:59

Cookie和Sess實(shí)現(xiàn)跨域

2022-04-01 12:38:32

cookie代碼面試

2022-04-29 09:11:14

CORS瀏覽器

2014-08-19 10:36:02

AngularCORS

2020-12-20 18:00:04

跨域請(qǐng)求開(kāi)發(fā)CORS

2012-11-12 10:34:50

IBMdw

2020-12-31 08:14:39

VueAxiosJavaScript

2011-11-07 11:15:31

2017-12-19 17:54:31

前端ajax跨域cors

2019-03-01 09:55:28

HTTPMock架構(gòu)
點(diǎn)贊
收藏

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

九色91在线视频| 在线观看日韩www视频免费| 久久综合久久久久| 神马午夜在线观看| 免费在线看一区| 欧美人与性动交a欧美精品| 久久久久国产精品无码免费看| 午夜久久中文| 亚洲欧美日韩一区二区三区在线观看 | 一区二区三区少妇| 日本欧美在线| 激情亚洲一区二区三区四区| 亚洲图片欧洲图片日韩av| 丁香六月天婷婷| 美国av一区二区| 欧美一区二区三区图| 国产精品嫩草影院俄罗斯| 日韩av三区| 欧美大片在线观看一区二区| 91热这里只有精品| xxx.xxx欧美| 1024亚洲合集| 日韩精品成人一区二区在线观看| 精品乱子伦一区二区| 奇米影视在线99精品| 2019最新中文字幕| 美女视频黄免费| 久久在线视频| 亚洲人成网在线播放| 无码人妻精品一区二区三| 欧美啪啪网站| 在线精品视频小说1| 国产免费黄色一级片| 黄色网页在线免费观看| 久久伊人中文字幕| 极品尤物一区二区三区| www久久久com| 国产一区二区三区蝌蚪| 成人国产精品一区二区| 伊人免费在线观看高清版| 老鸭窝亚洲一区二区三区| 午夜精品久久久久久久男人的天堂 | 国产视频一区在线观看| 久久精品久久精品国产大片| 成人午夜视频一区二区播放| 国产盗摄精品一区二区三区在线| 成人夜晚看av| 日本妇乱大交xxxxx| 久久久精品日韩| 日韩女在线观看| 伊人中文字幕在线观看| 米奇777在线欧美播放| 97在线视频免费观看| 日本熟妇成熟毛茸茸| 亚洲激情成人| 2019中文字幕免费视频| 在线观看日本网站| 麻豆91精品| 日韩av免费一区| 日韩精品在线一区二区三区| 免费在线观看精品| 91精品久久久久久久久久久| 91国产精品一区| 看电视剧不卡顿的网站| 国产日本欧美一区二区三区| 国产三级三级在线观看| 高清av一区二区| 国产日韩欧美一区二区三区四区 | 99久久er| 在线观看91av| 最新国产精品自拍| 久久激情av| 亚洲欧美日韩国产精品| 日本成人午夜影院| 午夜久久免费观看| 久久久噜噜噜久久中文字免| 日本中文字幕在线免费观看| 久久精品盗摄| 国产精品丝袜视频| 国产精品毛片久久久久久久av| 精东粉嫩av免费一区二区三区| 91亚洲一区精品| 亚洲欧美激情国产综合久久久| a级精品国产片在线观看| 欧美日韩精品免费在线观看视频| 国产在线日本| 最新久久zyz资源站| 久草视频国产在线| 日本精品另类| 日韩欧美国产电影| 人妻视频一区二区| 国产一区观看| 国产精品久久视频| 亚洲第九十九页| 久久久精品中文字幕麻豆发布| 中文视频一区视频二区视频三区| 久草在线资源站资源站| 一本大道久久a久久精品综合 | 成人黄页毛片网站| 日韩av不卡在线播放| 影音先锋男人资源在线| 色综合 综合色| 999热精品视频| 中文字幕av一区二区三区人| 久久夜色精品国产亚洲aⅴ| 毛片基地在线观看| 国产成人欧美日韩在线电影| 清纯唯美一区二区三区| 久久一卡二卡| 欧美日韩电影一区| 日本黄色网址大全| 欧美喷水视频| 国产精品影院在线观看| 日韩精品福利| 亚洲在线观看免费| 色天使在线观看| 国产欧美一区二区三区精品观看| 久久99久久99精品中文字幕| 一级特黄aaa大片| 久久综合色婷婷| av女优在线播放| 国产精品一区三区在线观看| 永久免费看mv网站入口亚洲| 久久黄色精品视频| kk眼镜猥琐国模调教系列一区二区| 亚洲一区二区四区| 天天综合网天天| 亚洲国产欧美久久| 国产精品成人久久| 国产精品白丝jk黑袜喷水| 亚洲制服欧美久久| 国模一区二区| 国产一区二区成人| 国产一级18片视频| 91女神在线视频| 久久久亚洲国产精品| 麻豆视频久久| 久久伊人精品视频| 国产精品人人妻人人爽| 国产精品美女久久久久久 | 日韩精品视频免费看| 国产福利91精品一区| 久久99国产精品一区| 国产精品成人国产| 最近免费中文字幕视频2019| 天堂av免费在线观看| 久久久久久免费毛片精品| 黄色动漫网站入口| 免费成人高清在线视频theav| 91av在线视频观看| 天天射天天操天天干| 婷婷一区二区三区| 成人免费网站黄| 日韩一级精品| 欧美日韩精品免费观看| 欧美日韩五码| 中日韩美女免费视频网址在线观看 | 欧美凹凸一区二区三区视频| 成人亚洲欧美| 国产亚洲精品美女久久久| 99re热视频| 亚洲欧洲成人av每日更新| 免费av不卡在线| 午夜精品久久99蜜桃的功能介绍| 99电影网电视剧在线观看| 免费在线看污片| 亚洲国产日韩精品在线| 天天操夜夜操视频| 国产精品丝袜一区| 性色av浪潮av| 欧美午夜一区二区福利视频| 国产偷久久久精品专区| 黄色精品视频| 久久中文字幕在线| 亚洲老妇色熟女老太| 亚洲一区二区三区在线| 日韩精品卡通动漫网站| 老司机午夜精品| 人妻av无码专区| 亚洲尤物av| 亚洲a在线观看| 黄色激情在线播放| 综合欧美国产视频二区| 国内毛片毛片毛片毛片| 偷拍日韩校园综合在线| 三区四区在线观看| 国产成人免费视频网站高清观看视频| 国产69精品久久久久999小说| 精品视频亚洲| 999精品视频一区二区三区| 亚洲欧洲自拍| 久久综合免费视频| 黄色影院在线播放| 日韩午夜小视频| aaa在线视频| 一区二区视频免费在线观看| 中文字幕av网址| 国产黄色精品视频| www.xxx亚洲| 亚洲第一黄色| 中文字幕剧情在线观看一区| 女一区二区三区| 成人两性免费视频| av有声小说一区二区三区| 久久亚洲综合国产精品99麻豆精品福利| 人妻丰满熟妇av无码区hd| 欧美三级在线视频| 日本熟妇成熟毛茸茸| 亚洲日本一区二区三区| 五月婷婷综合在线观看| 懂色av一区二区三区免费看| 国产福利在线免费| 久久久亚洲人| 午夜免费福利小电影| 亚洲国产精品综合久久久| 欧美不卡1区2区3区| 久久aimee| 国产91亚洲精品一区二区三区| 国产精品原创视频| 国产精品wwww| videos性欧美另类高清| 国内精品免费午夜毛片| a级片国产精品自在拍在线播放| 亚洲网址你懂得| 日本天堂影院在线视频| 亚洲第一综合天堂另类专 | 亚洲电影免费观看高清完整版在线 | 啦啦啦中文在线观看日本| 久久视频国产精品免费视频在线| 国产高清一级毛片在线不卡| 亚洲免费av网址| 五月天激情婷婷| 亚洲风情亚aⅴ在线发布| www.国产免费| 日韩精品一区二区三区视频在线观看| 国产精品视频在线观看免费| 欧美日韩黄视频| 亚洲综合网av| 91精品在线免费| 国产一区二区在线视频观看| 欧美美女喷水视频| 一级黄色大片网站| 69堂成人精品免费视频| 88av在线视频| 日韩一区二区三| aaa一区二区三区| 日韩三级精品电影久久久| www.黄色小说.com| 精品精品国产高清a毛片牛牛 | 成人黄色在线视频| www.88av| 久久这里只精品最新地址| 少妇按摩一区二区三区| 国产三级精品在线| 五月婷婷婷婷婷| 国产精品不卡在线观看| 放荡的美妇在线播放| 亚洲六月丁香色婷婷综合久久 | 欧洲成人午夜精品无码区久久| 高清久久久久久| 亚洲一区二区乱码| 国产日韩一级二级三级| 1024在线看片| 亚洲精品亚洲人成人网 | 色婷婷av一区二区三区软件| 91porny九色| 正在播放亚洲一区| 亚洲精品免费在线观看视频| 亚洲国产中文字幕久久网| 三区在线观看| 中文字幕一精品亚洲无线一区 | 国产原创欧美精品| 国产日本亚洲| 国产一区二区精品免费| 国产欧美日韩视频在线| 中文字幕av导航| 亚洲精品在线二区| 不卡av免费在线| 国产成人亚洲综合色影视| 国产视频久久久久久| 中文字幕免费一区| 久久久久噜噜噜亚洲熟女综合| 精品久久香蕉国产线看观看gif| av首页在线观看| 日韩欧美国产三级电影视频| 三区在线观看| 久久视频精品在线| xx欧美视频| 亚洲综合在线播放| 在线亚洲a色| 亚洲色婷婷久久精品av蜜桃| 久久精品九九| 国产伦精品一区二区三区88av| 国产亚洲精品资源在线26u| 九九热视频精品| 欧美特级限制片免费在线观看| 成人激情四射网| 伊人久久久久久久久久| 九色91在线| 成人av在线天堂| 国产精品最新| 日韩日韩日韩日韩日韩| 国内精品国产三级国产a久久| 中文字幕一区二区久久人妻网站| 亚洲素人一区二区| 国产免费www| 亚洲国产精品人久久电影| 国产成人高清精品| 日本亚洲欧美三级| 精品三级av在线导航| 日韩精品一区二区三区电影| 久久夜色精品| 国产精品无码一区二区三| 亚洲精品中文在线| 一级黄色片在线看| 伊人伊成久久人综合网站| 午夜伦理福利在线| 国产欧美日韩一区| 欧美日韩综合| 91av视频免费观看| 欧美激情资源网| 中文字幕一区二区人妻电影| 精品国产伦一区二区三区观看方式 | 久久综合九色欧美综合狠狠| 毛片a片免费观看| 日韩免费高清视频| 男人天堂久久久| 国产精品欧美日韩久久| 国产欧美日韩在线观看视频| 欧美老熟妇喷水| 91网址在线看| 日韩在线视频免费播放| 亚洲国产精品悠悠久久琪琪| 国产乱妇乱子在线播视频播放网站| 91网站免费观看| 国产精品久久久久久久久妇女| 九热视频在线观看| 欧美激情在线一区二区三区| 中文字幕一区二区三区四区欧美| 日韩电视剧免费观看网站| 国产精品186在线观看在线播放| 91免费在线观看网站| 午夜精品久久| 亚洲婷婷在线观看| 午夜精品成人在线视频| 日韩一级片免费| 奇米4444一区二区三区| 亚洲第一福利专区| 欧美xxxxx在线视频| 欧美国产日韩精品免费观看| 国产美女www| 日韩在线视频播放| 日本超碰一区二区| 成人在线播放网址| www.亚洲国产| 久久永久免费视频| 最新国产精品亚洲| vam成人资源在线观看| 欧美日韩中文字幕在线播放| 国产.欧美.日韩| 日韩欧美一级视频| 国产一区二区三区中文 | 狠狠色伊人亚洲综合网站色| 久久精品主播| 永久免费未视频| 日韩一二三区视频| 91色在线看| 青青影院一区二区三区四区| 国模娜娜一区二区三区| 欧美成人免费观看视频 | 国产精品区免费视频| 国产亚洲毛片| 成年人视频软件| 精品少妇一区二区三区日产乱码| 亚洲精品成人图区| 欧美日韩视频免费在线观看| 国产成人精品免费一区二区| 国内免费精品视频| 色999日韩欧美国产| 日日夜夜精品视频| 国产第一页视频| 中文字幕综合网| 神马久久久久久久久久| 国产精品亚洲片夜色在线| 国内精品嫩模av私拍在线观看| 国产精品三级在线观看无码| 制服视频三区第一页精品| 一本大道色婷婷在线| 不卡中文字幕在线| 2024国产精品| 精品国产99久久久久久宅男i| 欧美中文在线观看| 伊人情人综合网| 亚洲av片不卡无码久久| 91精品一区二区三区在线观看| 一区二区乱码| 久久久久久久香蕉| 中文字幕不卡的av| 三级视频在线播放| 91九色蝌蚪成人|