Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 激性欧美在线播激性欧美,亚洲激情综合在线,玖玖玖精品视频免费播放

          整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          5 個(gè)頂級(jí)的 JavaScript Ajax 組件和

          5 個(gè)頂級(jí)的 JavaScript Ajax 組件和庫(kù)

          這篇文章中,我們將介紹一些用于AJAX調(diào)用的最好的JS庫(kù),包括jQuery,Axios和Fetch。歡迎查看代碼示例!

          AJAX是用來(lái)對(duì)服務(wù)器進(jìn)行異步HTTP調(diào)用的一系列web開(kāi)發(fā)技術(shù)客戶端框架。 AJAX即Asynchronous JavaScript and XML(異步JavaScript和XML)。AJAX曾是web開(kāi)發(fā)界的一個(gè)常見(jiàn)名稱,許多流行的JavaScript小部件都是使用AJAX構(gòu)建的。例如,有些特定的用戶交互(如按下按鈕)會(huì)異步調(diào)用到服務(wù)器,服務(wù)器會(huì)檢索數(shù)據(jù)并將其返回給客戶端——所有這些都不需要重新加載網(wǎng)頁(yè)。

          AJAX的現(xiàn)代化重新引入

          JavaScript已經(jīng)進(jìn)化了,現(xiàn)在我們使用前端庫(kù)和/或如React、Angular、Vue等框架構(gòu)建了動(dòng)態(tài)的網(wǎng)站。AJAX的概念也經(jīng)歷了重大變化,因?yàn)楝F(xiàn)代異步JavaScript調(diào)用涉及檢索JSON而不是XML。有很多庫(kù)允許你從客戶端應(yīng)用程序?qū)Ψ?wù)器進(jìn)行異步調(diào)用。有些進(jìn)入到瀏覽器標(biāo)準(zhǔn),有些則有很大的用戶基礎(chǔ),因?yàn)樗鼈儾坏`活而且易于使用。有些支持promises,有些則使用回調(diào)。在本文中,我將介紹用于從服務(wù)器獲取數(shù)據(jù)的前5個(gè)AJAX庫(kù)。

          Fetch API

          Fetch API是XMLHttpRequest的現(xiàn)代替代品,用于從服務(wù)器檢索資源。與XMLHttpRequest不同的是,它具有更強(qiáng)大的功能集和更有意義的命名。基于其語(yǔ)法和結(jié)構(gòu),F(xiàn)etch不但靈活而且易于使用。但是,與其他AJAX HTTP庫(kù)區(qū)別開(kāi)來(lái)的是,它具有所有現(xiàn)代Web瀏覽器的支持。Fetch遵循請(qǐng)求-響應(yīng)的方法,也就是說(shuō),F(xiàn)etch提出請(qǐng)求并返回解析到Response對(duì)象的promise。

          你可以傳遞Request對(duì)象來(lái)獲取,或者,也可以僅傳遞要獲取的資源的URL。下面的示例演示了使用Fetch創(chuàng)建簡(jiǎn)單的GET請(qǐng)求。

          fetch('https://www.example.com', {

          method: 'get'

          })

          .then(response=> response.json())

          .then(jsonData=> console.log(jsonData))

          .catch(err=> {

          //error block

          })

          正如你所看到的,F(xiàn)etch的then方法返回了一個(gè)響應(yīng)對(duì)象,你可以使用一系列的then 進(jìn)行進(jìn)一步的操作。我使用.json() 方法將響應(yīng)轉(zhuǎn)換為JSON并將其輸出到控制臺(tái)。

          假如你需要POST表單數(shù)據(jù)或使用Fetch創(chuàng)建AJAX文件上傳,將會(huì)怎么樣?此時(shí),除了Fetch之外,你還需要一個(gè)輸入表單,并使用FormData庫(kù)來(lái)存儲(chǔ)表單對(duì)象。

          var input=document.querySelector('input[type="file"]')

          var data=new FormData()

          data.append('file', input.files[0])

          data.append('user', 'blizzerand')

          fetch('/avatars', {

          method: 'POST',

          body: data

          })

          你可以在官方的Mozilla web文檔中閱讀更多關(guān)于Fetch API的信息。

          Axios

          Axios是一個(gè)基于XMLHttpRequest而構(gòu)建的現(xiàn)代JavaScript庫(kù),用于進(jìn)行AJAX調(diào)用。它允許你從瀏覽器和服務(wù)器發(fā)出HTTP請(qǐng)求。此外,它還支持ES6原生的Promise API。Axios的其他突出特點(diǎn)包括:

          • 攔截請(qǐng)求和響應(yīng)。
          • 使用promise轉(zhuǎn)換請(qǐng)求和響應(yīng)數(shù)據(jù)。
          • 自動(dòng)轉(zhuǎn)換JSON數(shù)據(jù)。
          • 取消實(shí)時(shí)請(qǐng)求。

          要使用Axios,你需要先安裝它。

          npm install axios

          下面是一個(gè)演示Axios行動(dòng)的基本例子。

          // Make a request for a user with a given ID

          axios.get('/user?ID=12345')

          .then(function (response) {

          console.log(response);

          })

          .catch(function (error) {

          console.log(error);

          });

          與Fetch相比,Axios的語(yǔ)法更簡(jiǎn)單。讓我們做一些更復(fù)雜的事情,比如我們之前使用Fetch創(chuàng)建的AJAX文件上傳器。

          var data=new FormData();

          data.append('foo', 'bar');

          data.append('file', document.getElementById('file').files[0]);

          var config={

          onUploadProgress: function(progressEvent) {

          var percentCompleted=Math.round( (progressEvent.loaded * 100) / progressEvent.total );

          }

          };

          axios.put('/upload/server', data, config)

          .then(function (res) {

          output.className='container';

          output.innerHTML=res.data;

          })

          .catch(function (err) {

          output.className='container text-danger';

          output.innerHTML=err.message;

          });

          Axios更具可讀性。Axios也非常受React和Vue等現(xiàn)代庫(kù)的歡迎。

          jQuery

          jQuery曾經(jīng)是JavaScript中的一個(gè)前線庫(kù),用于處理從AJAX調(diào)用到操縱DOM內(nèi)容的所有事情。雖然隨著其他前端庫(kù)的“沖擊”,其相關(guān)性有所降低,但你仍然可以使用jQuery來(lái)進(jìn)行異步調(diào)用。

          如果你之前使用過(guò)jQuery,那么這可能是最簡(jiǎn)單的解決方案。但是,你將不得不導(dǎo)入整個(gè)jQuery庫(kù)以使用$.ajax方法。雖然這個(gè)庫(kù)有特定于域的方法,例如$.getJSON,$.get和$.post,但是其語(yǔ)法并不像其他的AJAX庫(kù)那么簡(jiǎn)單。以下代碼用于編寫(xiě)基本的GET請(qǐng)求。

          $.ajax({

          url: '/users',

          type: "GET",

          dataType: "json",

          success: function (data) {

          console.log(data);

          }

          fail: function () {

          console.log("Encountered an error")

          }

          });

          jQuery好的地方在于,如果你有疑問(wèn),那么你可以找到大量的支持和文檔。我發(fā)現(xiàn)了很多使用FormData()和jQuery進(jìn)行AJAX文件上傳的例子。下面是最簡(jiǎn)單的方法:

          var formData=new FormData();

          formData.append('file', $('#file')[0].files[0]);

          $.ajax({

          url : 'upload.php',

          type : 'POST',

          data : formData,

          processData: false, // tell jQuery not to process the data

          contentType: false, // tell jQuery not to set contentType

          success : function(data) {

          console.log(data);

          alert(data);

          }

          });

          SuperAgent

          SuperAgent是一個(gè)輕量級(jí)和漸進(jìn)式的AJAX庫(kù),更側(cè)重于可讀性和靈活性。SuperAgent還擁有一個(gè)溫和的學(xué)習(xí)曲線,不像其他庫(kù)。它有一個(gè)針對(duì)Node.js API相同的模塊。SuperAgent有一個(gè)接受GET、POST、PUT、DELETE和HEAD等方法的請(qǐng)求對(duì)象。然后你可以調(diào)用.then(),.end()或新的.await()方法來(lái)處理響應(yīng)。例如,以下代碼為使用SuperAgent的簡(jiǎn)單GET請(qǐng)求。

          request

          .post('/api/pet')

          .send({ name: 'Manny', species: 'cat' })

          .set('X-API-Key', 'foobar')

          .set('Accept', 'application/json')

          .then(function(res) {

          alert('yay got ' + JSON.stringify(res.body));

          });

          如果你想要做更多的事情,比如使用此AJAX庫(kù)上傳文件,那該怎么做呢? 同樣超級(jí)easy。

          request

          .post('/upload')

          .field('user[name]', 'Tobi')

          .field('user[email]', 'tobi@learnboost.com')

          .field('friends[]', ['loki', 'jane'])

          .attach('image', 'path/to/tobi.png')

          .then(callback);

          如果你有興趣了解更多關(guān)于SuperAgent的信息,那么它們有一系列很不錯(cuò)的文檔來(lái)幫助你開(kāi)始這個(gè)旅程。

          Request——簡(jiǎn)化的HTTP客戶端

          Request庫(kù)是進(jìn)行HTTP調(diào)用最簡(jiǎn)單的方法之一。結(jié)構(gòu)和語(yǔ)法與在Node.js中處理請(qǐng)求的方式非常相似。目前,該項(xiàng)目在GitHub上有18K個(gè)星,值得一提的是,它是可用的最流行的HTTP庫(kù)之一。 下面是一個(gè)例子:

          var request=require('request');

          request('http://www.google.com', function (error, response, body) {

          console.log('error:', error); // Print the error if one occurred

          console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received

          console.log('body:', body); // Print the HTML for the Google homepage.

          });

          結(jié)論

          從客戶端進(jìn)行HTTP調(diào)用在十年前可不是一件容易的事。前端開(kāi)發(fā)人員不得不依賴于難以使用和實(shí)現(xiàn)的XMLHttpRequest。現(xiàn)代的庫(kù)和HTTP客戶端使得用戶交互、動(dòng)畫(huà)、異步文件上傳等前端功能變得更加簡(jiǎn)單。

          我個(gè)人最喜歡的是Axios,因?yàn)槲矣X(jué)得它更易讀更賞心悅目。你也可以忠于Fetch,因?yàn)樗臋n化良好且有標(biāo)準(zhǔn)化的解決方案。

          你個(gè)人最喜歡的AJAX庫(kù)是哪個(gè)? 歡迎各位分享你的看法。

          在所有主流的網(wǎng)站,基本上都用到了ajax技術(shù),通過(guò)異步請(qǐng)求數(shù)據(jù)已經(jīng)是一個(gè)很普及的實(shí)現(xiàn)方式。市面上主流的web前端框架也都有自己封裝的ajax,而且都是大同小異的。也就是說(shuō),Ajax這個(gè)輪子已經(jīng)是多的不能再多了,那為什么我們還要自己封裝一個(gè)Ajax呢?

          想要了解一個(gè)技術(shù)或者某個(gè)功能的實(shí)現(xiàn)原理,只有動(dòng)手實(shí)踐才能真正的了解。就如我在csdn上第一篇博客的博文描述。探索技術(shù)的路上本應(yīng)該自己造輪子,即使市面上有再多的選擇,自己動(dòng)手嘗試也是必要的,第一次嘗試必然會(huì)問(wèn)題眾多,但你不覺(jué)得解決他是一件很有成就感的事情嗎,這樣才能帶給你更大的進(jìn)步和更深刻的領(lǐng)悟。

          廢話不說(shuō),先來(lái)寫(xiě)一個(gè)最基礎(chǔ)的ajax:

          [javascript] view plain copy

          1. function ajax(a){
          2. var ajax=new XMLHttpRequest();
          3. ajax.onreadystatechange=function(){
          4. if (ajax.readyState==4 && ajax.status==200) {
          5. a.success(JSON.stringify(ajax.responseText))
          6. }
          7. }
          8. ajax.open(a.method, a.url,true)
          9. ajax.send(a.data)
          10. }
          11. ajax({
          12. method:'get',
          13. url:'http://127.0.0.1:8081/test',
          14. success:function(res){
          15. console.log(res)
          16. }
          17. })

          一個(gè)ajax出爐了,通過(guò)調(diào)用、填寫(xiě)參數(shù)即可請(qǐng)求到服務(wù)器。先來(lái)分析一下這個(gè)ajax的結(jié)構(gòu),可以看得出來(lái),其實(shí)很簡(jiǎn)單,只是new了一個(gè)XMLHttpRequest對(duì)象,然后通過(guò)onreadystatechange方法來(lái)處理返回值,現(xiàn)在我們只是做了一個(gè)判斷,當(dāng)請(qǐng)求成功時(shí)就調(diào)用success方法,如果請(qǐng)求失敗,我們還沒(méi)有寫(xiě)上去,后面我們慢慢完善這個(gè)ajax的邏輯。

          然后調(diào)用ajax的open方法,open方法里有三個(gè)參數(shù),第一個(gè)是請(qǐng)求方式(如:get或post),第二個(gè)是請(qǐng)求的url地址,第三個(gè)是一個(gè)bool值,是否要異步請(qǐng)求。

          最后使用send方法帶上參數(shù)發(fā)送請(qǐng)求即可。

          這是,我的服務(wù)器已經(jīng)收到一個(gè)請(qǐng)求,但他報(bào)了404錯(cuò)誤,也就是找不到對(duì)應(yīng)的頁(yè)面或路由,這時(shí)success方法也不會(huì)被調(diào)用執(zhí)行。

          那我們?cè)賮?lái)完善一下這個(gè)新生的ajax。我們只需要在onreadystatechange方法里增加一個(gè)條件,當(dāng)請(qǐng)求不成功時(shí)調(diào)用自身的error方法:

          [javascript] view plain copy

          1. ajax.onreadystatechange=function(){
          2. if (ajax.readyState==4 && ajax.status==200) {
          3. a.success(JSON.stringify(ajax.responseText))
          4. }else{
          5. a.error(ajax)
          6. }
          7. }

          這樣我們就可以在ajax請(qǐng)求的時(shí)候加上error方法,當(dāng)ajax請(qǐng)求失敗的時(shí)候執(zhí)行我們想要執(zhí)行的操作。現(xiàn)在我們拋除跨域請(qǐng)求的問(wèn)題,當(dāng)你發(fā)送post請(qǐng)求時(shí),你會(huì)發(fā)現(xiàn)后臺(tái)接收不到傳過(guò)來(lái)的參數(shù),調(diào)用如下:

          [javascript] view plain copy

          1. ajax({
          2. method:'get',
          3. url:'http://localhost:8081/test',
          4. data:'a=1',
          5. success:function(res){
          6. console.log(res)
          7. },
          8. error:function(res){
          9. console.log(res)
          10. }
          11. })

          后端打印一下傳過(guò)來(lái)的參數(shù),為空。

          出現(xiàn)這個(gè)問(wèn)題的原因主要是請(qǐng)求頭沒(méi)有聲明,這時(shí)候我們需要初始化聲明一下請(qǐng)求頭,那我們加入一行代碼:

          [javascript] view plain copy

          1. ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

          設(shè)置Conten-type為application/x-www-form-urlencoded,現(xiàn)在后端應(yīng)該是已經(jīng)可以收到參數(shù)了。那我們現(xiàn)在的ajax調(diào)用時(shí)實(shí)在太繁瑣,有些東西我們不想填的我們應(yīng)該給他設(shè)置一個(gè)默認(rèn)值,不然就會(huì)報(bào)錯(cuò)。

          比如error方法、method、還有是否異步的bool值等等。那我們?cè)偌尤胍恍┠J(rèn)值,現(xiàn)在的ajax是這樣的:

          [javascript] view plain copy

          1. function ajax(a){
          2. a.method=a.method || 'get';
          3. a.ajax=a.ajax || true;
          4. a.error=a.error || function(){
          5. console.warn('Ajax請(qǐng)求失敗');
          6. };
          7. var ajax=new XMLHttpRequest();
          8. ajax.onreadystatechange=function(){
          9. if (ajax.readyState==4 && ajax.status==200) {
          10. a.success(JSON.stringify(ajax.responseText))
          11. }else{
          12. a.error(ajax)
          13. }
          14. }
          15. ajax.open(a.method, a.url,a.ajax)
          16. ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
          17. ajax.send(a.data)
          18. }

          現(xiàn)在的ajax還存在一個(gè)問(wèn)題,在post請(qǐng)求的時(shí)候,如果我們要傳參,是需要通過(guò)字符串傳參的。那這種的書(shū)寫(xiě)規(guī)則并不是很友好的:

          [javascript] view plain copy

          1. a=1&b=2

          而一般框架的傳參都是通過(guò)json的格式來(lái)輸入的,我們也不能偏離大眾習(xí)慣搞獨(dú)立,當(dāng)然我們也要保留字符串的傳參方式,只是要擴(kuò)展功能。

          那我們需要加一個(gè)控制格式的參數(shù),我們這里用dataType這個(gè)參數(shù)來(lái)控制傳參格式,默認(rèn)是字符串格式傳參好了,可以選擇json格式進(jìn)行傳參即可。如果是json格式傳參,我們需要把json轉(zhuǎn)化成字符串類型,代碼如下:

          [javascript] view plain copy

          1. a.dataType=a.dataType || 'string';
          2. var data=a.data;
          3. if (a.dataType=='json') {
          4. var nowData="";
          5. for (var i in data) {
          6. nowData +=(nowData !=''?'&':'')+i+'='+data[i];
          7. }
          8. data=nowData;
          9. }

          這樣,我們的ajax也就可以通過(guò)json格式進(jìn)行傳參了。現(xiàn)在的ajax完整代碼和調(diào)用方式如下:

          [javascript] view plain copy

          1. function ajax(a){
          2. a.method=a.method || 'get';
          3. a.ajax=a.ajax || true;
          4. a.dataType=a.dataType || 'string';
          5. a.error=a.error || function(){
          6. console.warn('Ajax請(qǐng)求失敗');
          7. };
          8. var ajax=new XMLHttpRequest();
          9. ajax.onreadystatechange=function(){
          10. if (ajax.readyState==4 && ajax.status==200) {
          11. a.success(JSON.stringify(ajax.responseText))
          12. }else{
          13. a.error(ajax)
          14. }
          15. }
          16. var data=a.data;
          17. if (a.dataType=='json') {
          18. var nowData="";
          19. for (var i in data) {
          20. nowData +=(nowData !=''?'&':'')+i+'='+data[i];
          21. }
          22. data=nowData;
          23. }
          24. ajax.open(a.method, a.url,a.ajax)
          25. ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
          26. ajax.send(data)
          27. }
          28. //調(diào)用Ajax示例
          29. ajax({
          30. method:'post',
          31. url:'http://localhost:8081/test',
          32. dataType:'json',
          33. data:{
          34. a:'1',
          35. b:'2'
          36. },
          37. success:function(res){
          38. console.log(res)
          39. }
          40. })

          現(xiàn)在這個(gè)Ajax基本上已經(jīng)可以滿足業(yè)務(wù)上的所以需求,不過(guò)還有一點(diǎn)沒(méi)有實(shí)現(xiàn),我們的Ajax不能設(shè)置請(qǐng)求頭?!為了一些特殊需求的情況下,我們還是要把這一功能加上的:

          [javascript] view plain copy

          1. if (a.requestHeader) {
          2. for (var i in a.requestHeader) {
          3. ajax.setRequestHeader(i,a.requestHeader[i])
          4. }
          5. }

          現(xiàn)在的完整代碼入下:

          [javascript] view plain copy

          1. function ajax(a){
          2. a.method=a.method || 'get';
          3. a.ajax=a.ajax || true;
          4. a.dataType=a.dataType || 'string';
          5. a.error=a.error || function(){
          6. console.warn('Ajax請(qǐng)求失敗');
          7. };
          8. var ajax=new XMLHttpRequest();
          9. ajax.onreadystatechange=function(){
          10. if (ajax.readyState==4 && ajax.status==200) {
          11. a.success(JSON.parse(ajax.responseText))
          12. }else if (ajax.readyState !=4 && ajax.status !=200){
          13. a.error(ajax)
          14. }
          15. }
          16. var data=a.data;
          17. if (a.dataType=='json') {
          18. var nowData="";
          19. for (var i in data) {
          20. nowData +=(nowData !=''?'&':'')+i+'='+data[i];
          21. }
          22. data=nowData;
          23. }
          24. ajax.open(a.method, a.url,a.ajax)
          25. if (a.requestHeader) {
          26. for (var i in a.requestHeader) {
          27. ajax.setRequestHeader(i,a.requestHeader[i])
          28. }
          29. }
          30. ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
          31. ajax.send(data)
          32. }

          完整示例代碼文件:JavaScript封裝Ajax完整示例代碼

          jax怎么用

          首先我們從jsp或者是html文件開(kāi)始

          1.導(dǎo)入jQuery包,可以選擇通過(guò)網(wǎng)絡(luò)地址進(jìn)行導(dǎo)入 ,也可以下載jQuery的js文件進(jìn)行導(dǎo)入,兩種方法如下。

          jQuery的兩種引入方式

          2.編寫(xiě)我們的ajax異步方法。

          前端代碼編寫(xiě)


          接下來(lái)我們編寫(xiě)后臺(tái)的Java代碼

          1. 導(dǎo)入SpringMVC相關(guān)jar包文件,如果試用Maven做依賴管理的話,可以直接在pom.xml中插入以下代碼。

          maven依賴添加

          2.開(kāi)始編寫(xiě)我們的TestController代碼。

          后臺(tái)代碼Controller編寫(xiě)

          3.接下來(lái)就是運(yùn)行我們的程序,進(jìn)入html或者jsp點(diǎn)擊按鈕即可看到效果,我這里就不做演示,大家如果還有什么問(wèn)題的話隨時(shí)留言。

          然后呢我們來(lái)說(shuō)一下,怎么通過(guò)ajax進(jìn)行異步驗(yàn)證。查看注冊(cè)用戶名是否存在。

          首先是數(shù)據(jù)庫(kù)設(shè)計(jì),在這里我只做簡(jiǎn)單的示例

          1. 創(chuàng)建數(shù)據(jù)庫(kù),創(chuàng)建表格sql語(yǔ)句如下:

          在數(shù)據(jù)庫(kù)中創(chuàng)建用戶表格

          2.創(chuàng)建完成后,表結(jié)構(gòu)如下圖所示:

          用戶表結(jié)構(gòu)

          然后就是編寫(xiě)我們的dao層代碼

          1.jdbc模式代碼如下:

          jdbc模式代碼-1

          jdbc模式代碼-2

          2.mybatis模式如下:

          Mybatis模式代碼

          3.hibernate模式如下:

          hibernate模式代碼

          接下來(lái)編寫(xiě)我們的service代碼

          service通用代碼

          接下來(lái)到了我們的控制器層Controller

          Controller控制器代碼

          最后就是我們的重頭戲了——我們的前端代碼以及通過(guò)jquery實(shí)現(xiàn)ajax異步驗(yàn)證

          html代碼,用戶注冊(cè)登陸頁(yè)面

          結(jié)束語(yǔ)

          至此,我們的驗(yàn)證算是完成,大家如果還有什么問(wèn)題,可以評(píng)論或者留言告訴我,我會(huì)盡全力為大家進(jìn)行解答,謝謝各位。如果大家覺(jué)得有什么不便,可以私信聯(lián)系我。


          主站蜘蛛池模板: 免费萌白酱国产一区二区三区| 国产丝袜一区二区三区在线观看| 中文字幕AV无码一区二区三区| 国产一区中文字幕在线观看 | 日韩一本之道一区中文字幕| 一本一道波多野结衣一区| 国产一区在线视频| 国产精品无码亚洲一区二区三区| 国产精品美女一区二区视频| 亚洲爽爽一区二区三区| 精品国产一区二区三区久| 国产乱人伦精品一区二区| 78成人精品电影在线播放日韩精品电影一区亚洲 | 在线中文字幕一区| 久久久久无码国产精品一区| 亚洲一区二区女搞男| 中文无码精品一区二区三区| www一区二区三区| 久久精品无码一区二区app| 一区二区三区在线看| 一本色道久久综合一区| 无码日韩精品一区二区人妻 | 亚洲综合一区二区精品导航| 国产精品高清一区二区三区| 夜夜添无码一区二区三区| 国产色情一区二区三区在线播放| 日韩一区二区三区免费播放| 538国产精品一区二区在线| 99精品国产一区二区三区| 久久成人国产精品一区二区| 亚洲视频在线一区二区| 国产日韩高清一区二区三区| 国产午夜精品一区理论片飘花 | 亚洲AV无码一区二区三区牲色| 亚洲综合一区国产精品| 国产丝袜一区二区三区在线观看| 精品成人一区二区三区四区| 成人精品视频一区二区三区不卡 | 亚洲a∨无码一区二区| 日韩精品免费一区二区三区| 一区二区三区视频网站|