波多野结衣简介_爱的色放3_欧美精品一区二_五月亚洲婷婷_美女被娇喘视频_亚洲午夜免费_好吊色视频988gao在线观看_在线一区_99久久精品免费视频_欧美色吊丝_亚洲色图小说_亚洲两性视频_男女做的视频_亚洲自拍图片_免费黄色一级片

資訊專欄INFORMATION COLUMN

Ajax知識體系大梳理

Aomine / 2403人閱讀

摘要:導(dǎo)讀全稱即異步與它最早在中被使用然后由推廣開來典型的代表應(yīng)用有以及現(xiàn)代網(wǎng)頁中幾乎無不歡前后端分離也正是建立在異步通信的基礎(chǔ)之上瀏覽器為做了什么現(xiàn)代瀏覽器中雖然幾乎全部支持但它們的技術(shù)方案卻分為兩種標(biāo)準(zhǔn)瀏覽器通過對象實現(xiàn)了的功能只需要通過一行

導(dǎo)讀

Ajax 全稱 Asynchronous JavaScript and XML, 即異步JS與XML. 它最早在IE5中被使用, 然后由Mozilla, Apple, Google推廣開來. 典型的代表應(yīng)用有 Outlook Web Access, 以及 GMail. 現(xiàn)代網(wǎng)頁中幾乎無ajax不歡. 前后端分離也正是建立在ajax異步通信的基礎(chǔ)之上.

瀏覽器為ajax做了什么

現(xiàn)代瀏覽器中, 雖然幾乎全部支持ajax, 但它們的技術(shù)方案卻分為兩種:

① 標(biāo)準(zhǔn)瀏覽器通過 XMLHttpRequest 對象實現(xiàn)了ajax的功能. 只需要通過一行語句便可創(chuàng)建一個用于發(fā)送ajax請求的對象.

var xhr = new XMLHttpRequest();

② IE瀏覽器通過 XMLHttpRequest 或者 ActiveXObject 對象同樣實現(xiàn)了ajax的功能.

MSXML

鑒于IE系列各種 "神級" 表現(xiàn), 我們先來看看IE瀏覽器風(fēng)騷的走位.

IE下的使用環(huán)境略顯復(fù)雜, IE7及更高版本瀏覽器可以直接使用BOM的 XMLHttpRequest 對象. MSDN傳送門: Native XMLHTTPRequest object. IE6及更低版本瀏覽器只能使用 ActiveXObject 對象來創(chuàng)建 XMLHttpRequest 對象實例. 創(chuàng)建時需要指明一個類似"Microsoft.XMLHTTP"這樣的ProgID. 而實際呢, windows系統(tǒng)環(huán)境下, 以下ProgID都應(yīng)該可以創(chuàng)建XMLHTTP對象:

Microsoft.XMLHTTP
Microsoft.XMLHTTP.1.0
Msxml2.ServerXMLHTTP
Msxml2.ServerXMLHTTP.3.0
Msxml2.ServerXMLHTTP.4.0
Msxml2.ServerXMLHTTP.5.0
Msxml2.ServerXMLHTTP.6.0
Msxml2.XMLHTTP
Msxml2.XMLHTTP.3.0
Msxml2.XMLHTTP.4.0
Msxml2.XMLHTTP.5.0
Msxml2.XMLHTTP.6.0

簡言之, Microsoft.XMLHTTP 已經(jīng)非常老了, 主要用于提供對歷史遺留版本的支持, 不建議使用.對于 MSXML4, 它已被 MSXML6 替代; 而 MSXML5 又是專門針對office辦公場景, 在沒有安裝 Microsoft Office 2003 及更高版本辦公軟件的情況下, MSXML5 未必可用. 相比之下, MSXML6 具有比 MSXML3 更穩(wěn)定, 更高性能, 更安全的優(yōu)勢, 同時它也提供了一些 MSXML3 中沒有的功能, 比如說 XSD schema. 唯一遺憾的是, MSXML6 只在 vista 系統(tǒng)及以上才是默認(rèn)支持的; 而 MSXML3 在 Win2k SP4及以上系統(tǒng)就是可用的. 因此一般情況下, MSXML3 可以作為 MSXML6 的優(yōu)雅降級方案, 我們通過指定 PorgID 為 Msxml2.XMLHTTP 即可自動映射到 Msxml2.XMLHTTP.3.0. 如下所示:

var xhr = new ActiveXObject("Msxml2.XMLHTTP");// 即MSXML3,等同于如下語句
var xhr = new ActiveXObject("MSXML2.XMLHTTP.3.0");

MSDN有篇文章專門講解了各個版本的MSXML. 傳送門: Using the right version of MSXML in Internet Explorer.

親測了 IE5, IE5.5, IE6, IE7, IE8, IE9, IE10, IE edge等瀏覽器, IE5及之后的瀏覽器均可以通過如下語句獲取xhr對象:

var xhr = new ActiveXObject("Msxml2.XMLHTTP");// 即MSXML3
var xhr = new ActiveXObject("Microsoft.XMLHTTP");// 很老的api,雖然瀏覽器支持,功能可能不完善,故不建議使用

以上, 思路已經(jīng)很清晰了, 下面給出個全兼容的方法.

全平臺兼容的XMLHttpRequest對象
function getXHR(){
  var xhr = null;
  if(window.XMLHttpRequest) {
    xhr = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    try {
      xhr = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) { 
        alert("您的瀏覽器暫不支持Ajax!");
      }
    }
  }
  return xhr;
}
ajax有沒有破壞js單線程機制

對于這個問題, 我們先看下瀏覽器線程機制. 一般情況下, 瀏覽器有如下四種線程:

GUI渲染線程

javascript引擎線程

瀏覽器事件觸發(fā)線程

HTTP請求線程

那么這么多線程, 它們究竟是怎么同js引擎線程交互的呢?

通常, 它們的線程間交互以事件的方式發(fā)生, 通過事件回調(diào)的方式予以通知. 而事件回調(diào), 又是以先進先出的方式添加到任務(wù)隊列 的末尾 , 等到j(luò)s引擎空閑時, 任務(wù)隊列 中排隊的任務(wù)將會依次被執(zhí)行. 這些事件回調(diào)包括 setTimeout, setInterval, click, ajax異步請求等回調(diào).

瀏覽器中, js引擎線程會循環(huán)從 任務(wù)隊列 中讀取事件并且執(zhí)行, 這種運行機制稱作 Event Loop (事件循環(huán)).

對于一個ajax請求, js引擎首先生成 XMLHttpRequest 實例對象, open過后再調(diào)用send方法. 至此, 所有的語句都是同步執(zhí)行. 但從send方法內(nèi)部開始, 瀏覽器為將要發(fā)生的網(wǎng)絡(luò)請求創(chuàng)建了新的http請求線程, 這個線程獨立于js引擎線程, 于是網(wǎng)絡(luò)請求異步被發(fā)送出去了. 另一方面, js引擎并不會等待 ajax 發(fā)起的http請求收到結(jié)果, 而是直接順序往下執(zhí)行.

當(dāng)ajax請求被服務(wù)器響應(yīng)并且收到response后, 瀏覽器事件觸發(fā)線程捕獲到了ajax的回調(diào)事件 onreadystatechange (當(dāng)然也可能觸發(fā)onload, 或者 onerror等等) . 該回調(diào)事件并沒有被立即執(zhí)行, 而是被添加到 任務(wù)隊列 的末尾. 直到j(luò)s引擎空閑了, 任務(wù)隊列 的任務(wù)才被撈出來, 按照添加順序, 挨個執(zhí)行, 當(dāng)然也包括剛剛append到隊列末尾的 onreadystatechange 事件.

onreadystatechange 事件內(nèi)部, 有可能對dom進行操作. 此時瀏覽器便會掛起js引擎線程, 轉(zhuǎn)而執(zhí)行GUI渲染線程, 進行UI重繪(repaint)或者回流(reflow). 當(dāng)js引擎重新執(zhí)行時, GUI渲染線程又會被掛起, GUI更新將被保存起來, 等到j(luò)s引擎空閑時立即被執(zhí)行.

以上整個ajax請求過程中, 有涉及到瀏覽器的4種線程. 其中除了 GUI渲染線程js引擎線程 是互斥的. 其他線程相互之間, 都是可以并行執(zhí)行的. 通過這樣的一種方式, ajax并沒有破壞js的單線程機制.

ajax與setTimeout排隊問題

通常, ajax 和 setTimeout 的事件回調(diào)都被同等的對待, 按照順序自動的被添加到 任務(wù)隊列 的末尾, 等待js引擎空閑時執(zhí)行. 但請注意, 并非xhr的所有回調(diào)執(zhí)行都滯后于setTImeout的回調(diào). 請看如下代碼:

function ajax(url, method){
  var xhr = getXHR();
  xhr.onreadystatechange = function(){
      console.log("xhr.readyState:" + this.readyState);
  }
  xhr.onloadstart = function(){
      console.log("onloadStart");
  }
  xhr.onload = function(){
      console.log("onload");
  }
  xhr.open(method, url, true);
  xhr.setRequestHeader("Cache-Control",3600);
  xhr.send();
}
var timer = setTimeout(function(){
  console.log("setTimeout");
},0);
ajax("http://louiszhai.github.io/docImages/ajax01.png","GET");

上述代碼執(zhí)行結(jié)果如下圖:

由于ajax異步, setTimeout回調(diào)本應(yīng)該最先被執(zhí)行, 然而實際上, 一次ajax請求, 并非所有的部分都是異步的, 至少"readyState==1"的 onreadystatechange 回調(diào)以及 onloadstart 回調(diào)就是同步執(zhí)行的. 因此它們的輸出排在最前面.

XMLHttpRequest 屬性解讀

首先在Chrome console下創(chuàng)建一個 XMLHttpRequest 實例對象xhr. 如下所示:

inherit

試運行以下代碼.

var xhr = new XMLHttpRequest(),
    i=0;
for(var key in xhr){
    if(xhr.hasOwnProperty(key)){
       i++;
   }
}
console.log(i);//0
console.log(XMLHttpRequest.prototype.hasOwnProperty("timeout"));//true

可見, XMLHttpRequest 實例對象沒有自有屬性. 實際上, 它的所有屬性均來自于 XMLHttpRequest.prototype .

追根溯源, XMLHttpRequest 實例對象具有如下的繼承關(guān)系. (下面以a<

xhr << XMLHttpRequest.prototype << XMLHttpRequestEventTarget.prototype << EventTarget.prototype << Object.prototype

由上, xhr也具有Object等原型中的所有方法. 如toString方法.

xhr.toString();//"[object XMLHttpRequest]"

通常, 一個xhr實例對象擁有10個普通屬性+9個方法.

readyState

只讀屬性, readyState屬性記錄了ajax調(diào)用過程中所有可能的狀態(tài). 它的取值簡單明了, 如下:

readyState 對應(yīng)常量 描述
0 (未初始化) xhr.UNSENT 請求已建立, 但未初始化(此時未調(diào)用open方法)
1 (初始化) xhr.OPENED 請求已建立, 但未發(fā)送 (已調(diào)用open方法, 但未調(diào)用send方法)
2 (發(fā)送數(shù)據(jù)) xhr.HEADERS_RECEIVED 請求已發(fā)送 (send方法已調(diào)用, 已收到響應(yīng)頭)
3 (數(shù)據(jù)傳送中) xhr.LOADING 請求處理中, 因響應(yīng)內(nèi)容不全, 這時通過responseBody和responseText獲取可能會出現(xiàn)錯誤
4 (完成) xhr.DONE 數(shù)據(jù)接收完畢, 此時可以通過通過responseBody和responseText獲取完整的響應(yīng)數(shù)據(jù)

注意, readyState 是一個只讀屬性, 想要改變它的值是不可行的.

onreadystatechange

onreadystatechange事件回調(diào)方法在readystate狀態(tài)改變時觸發(fā), 在一個收到響應(yīng)的ajax請求周期中, onreadystatechange 方法會被觸發(fā)4次. 因此可以在 onreadystatechange 方法中綁定一些事件回調(diào), 比如:

xhr.onreadystatechange = function(e){
  if(xhr.readystate==4){
    var s = xhr.status;
    if((s >= 200 && s < 300) || s == 304){
      var resp = xhr.responseText;
      //TODO ...
    }
  }
}

注意: onreadystatechange回調(diào)中默認(rèn)會傳入Event實例, 如下:

status

只讀屬性, status表示http請求的狀態(tài), 初始值為0. 如果服務(wù)器沒有顯式地指定狀態(tài)碼, 那么status將被設(shè)置為默認(rèn)值, 即200.

statusText

只讀屬性, statusText表示服務(wù)器的響應(yīng)狀態(tài)信息, 它是一個 UTF-16 的字符串, 請求成功且status==20X時, 返回大寫的 OK . 請求失敗時返回空字符串. 其他情況下返回相應(yīng)的狀態(tài)描述. 比如: 301的 Moved Permanently , 302的 Found , 303的 See Other , 307 的 Temporary Redirect , 400的 Bad Request , 401的 Unauthorized 等等.

onloadstart

onloadstart事件回調(diào)方法在ajax請求發(fā)送之前觸發(fā), 觸發(fā)時機在 readyState==1 狀態(tài)之后, readyState==2 狀態(tài)之前.

onloadstart方法中默認(rèn)將傳入一個ProgressEvent事件進度對象. 如下:

ProgressEvent對象具有三個重要的Read only屬性.

lengthComputable 表示長度是否可計算, 它是一個布爾值, 初始值為false.

loaded 表示已加載資源的大小, 如果使用http下載資源, 它僅僅表示已下載內(nèi)容的大小, 而不包括http headers等. 它是一個無符號長整型, 初始值為0.

total 表示資源總大小, 如果使用http下載資源, 它僅僅表示內(nèi)容的總大小, 而不包括http headers等, 它同樣是一個無符號長整型, 初始值為0.

onprogress

onprogress事件回調(diào)方法在 readyState==3 狀態(tài)時開始觸發(fā), 默認(rèn)傳入 ProgressEvent 對象, 可通過 e.loaded/e.total 來計算加載資源的進度, 該方法用于獲取資源的下載進度.

注意: 該方法適用于 IE10+ 及其他現(xiàn)代瀏覽器.

xhr.onprogress = function(e){
  console.log("progress:", e.loaded/e.total);
}
onload

onload事件回調(diào)方法在ajax請求成功后觸發(fā), 觸發(fā)時機在 readyState==4 狀態(tài)之后.

想要捕捉到一個ajax異步請求的成功狀態(tài), 并且執(zhí)行回調(diào), 一般下面的語句就足夠了:

xhr.onload = function(){
  var s = xhr.status;
  if((s >= 200 && s < 300) || s == 304){
    var resp = xhr.responseText;
    //TODO ...
  }
}
onloadend

onloadend事件回調(diào)方法在ajax請求完成后觸發(fā), 觸發(fā)時機在 readyState==4 狀態(tài)之后(收到響應(yīng)時) 或者 readyState==2 狀態(tài)之后(未收到響應(yīng)時).

onloadend方法中默認(rèn)將傳入一個ProgressEvent事件進度對象.

timeout

timeout屬性用于指定ajax的超時時長. 通過它可以靈活地控制ajax請求時間的上限. timeout的值滿足如下規(guī)則:

通常設(shè)置為0時不生效.

設(shè)置為字符串時, 如果字符串中全部為數(shù)字, 它會自動將字符串轉(zhuǎn)化為數(shù)字, 反之該設(shè)置不生效.

設(shè)置為對象時, 如果該對象能夠轉(zhuǎn)化為數(shù)字, 那么將設(shè)置為轉(zhuǎn)化后的數(shù)字.

xhr.timeout = 0; //不生效
xhr.timeout = "123"; //生效, 值為123
xhr.timeout = "123s"; //不生效
xhr.timeout = ["123"]; //生效, 值為123
xhr.timeout = {a:123}; //不生效
ontimeout

ontimeout方法在ajax請求超時時觸發(fā), 通過它可以在ajax請求超時時做一些后續(xù)處理.

xhr.ontimeout = function(e) {
  console.error("請求超時!!!")
}
response responseText

均為只讀屬性, response表示服務(wù)器的響應(yīng)內(nèi)容, 相應(yīng)的, responseText表示服務(wù)器響應(yīng)內(nèi)容的文本形式.

responseXML

只讀屬性, responseXML表示xml形式的響應(yīng)數(shù)據(jù), 缺省為null, 若數(shù)據(jù)不是有效的xml, 則會報錯.

responseType

responseType表示響應(yīng)的類型, 缺省為空字符串, 可取 "arraybuffer" , "blob" , "document" , "json" , and "text" 共五種類型.

responseURL

responseURL返回ajax請求最終的URL, 如果請求中存在重定向, 那么responseURL表示重定向之后的URL.

withCredentials

withCredentials是一個布爾值, 默認(rèn)為false, 表示跨域請求中不發(fā)送cookies等信息. 當(dāng)它設(shè)置為true時, cookies , authorization headers 或者 TLS客戶端證書 都可以正常發(fā)送和接收. 顯然它的值對同域請求沒有影響.

注意: 該屬性適用于 IE10+, opera12+及其他現(xiàn)代瀏覽器.

abort

abort方法用于取消ajax請求, 取消后, readyState 狀態(tài)將被設(shè)置為?0?(UNSENT). 如下, 調(diào)用abort 方法后, 請求將被取消.

getResponseHeader

getResponseHeader方法用于獲取ajax響應(yīng)頭中指定name的值. 如果response headers中存在相同的name, 那么它們的值將自動以字符串的形式連接在一起.

console.log(xhr.getResponseHeader("Content-Type"));//"text/html"
getAllResponseHeaders

getAllResponseHeaders方法用于獲取所有安全的ajax響應(yīng)頭, 響應(yīng)頭以字符串形式返回. 每個HTTP報頭名稱和值用冒號分隔, 如key:value, 并以rn結(jié)束.

xhr.onreadystatechange = function() {
  if(this.readyState == this.HEADERS_RECEIVED) {
    console.log(this.getAllResponseHeaders());
  }
}
//Content-Type: text/html"

以上, readyState === 2 狀態(tài)時, 就意味著響應(yīng)頭已接受完整. 此時便可以打印出完整的 response headers.

setRequestHeader

既然可以獲取響應(yīng)頭, 那么自然也可以設(shè)置請求頭, setRequestHeader就是干這個的. 如下:

//指定請求的type為json格式
xhr.setRequestHeader("Content-type", "application/json");
//除此之外, 還可以設(shè)置其他的請求頭
xhr.setRequestHeader("x-requested-with", "123456");
onerror

onerror方法用于在ajax請求出錯后執(zhí)行. 通常只在網(wǎng)絡(luò)出現(xiàn)問題時或者ERR_CONNECTION_RESET時觸發(fā)(如果請求返回的是407狀態(tài)碼, chrome下也會觸發(fā)onerror).

upload

upload屬性默認(rèn)返回一個 XMLHttpRequestUpload 對象, 用于上傳資源. 該對象具有如下方法:

onloadstart

onprogress

onabort

onerror

onload

ontimeout

onloadend

上述方法功能同 xhr 對象中同名方法一致. 其中, onprogress 事件回調(diào)方法可用于跟蹤資源上傳的進度.

xhr.upload.onprogress = function(e){
  var percent = 100 * e.loaded / e.total |0;
  console.log("upload: " + precent + "%");
}
overrideMimeType

overrideMimeType方法用于強制指定response 的 MIME 類型, 即強制修改response的 Content-Type . 如下, 服務(wù)器返回的response的 MIME 類型為 text/plain .

xhr.getResponseHeader("Content-Type");//"text/plain"
xhr.responseXML;//null

通過overrideMimeType方法將response的MIME類型設(shè)置為 text/xml;charset=utf-8 , 如下所示:

xhr.overrideMimeType("text/xml; charset = utf-8");
xhr.send();

此時雖然 response headers 如上圖, 沒有變化, 但 Content-Type 已替換為新值.

xhr.getResponseHeader("Content-Type");//"text/xml; charset = utf-8"

此時, xhr.responseXML 也將返回DOM對象, 如下圖.

XHR一級

XHR1 即 XMLHttpRequest Level 1. XHR1時, xhr對象具有如下缺點:

僅支持文本數(shù)據(jù)傳輸, 無法傳輸二進制數(shù)據(jù).

傳輸數(shù)據(jù)時, 沒有進度信息提示, 只能提示是否完成.

受瀏覽器 同源策略 限制, 只能請求同域資源.

沒有超時機制, 不方便掌控ajax請求節(jié)奏.

XHR二級

XHR2 即 XMLHttpRequest Level 2. XHR2針對XHR1的上述缺點做了如下改進:

支持二進制數(shù)據(jù), 可以上傳文件, 可以使用FormData對象管理表單.

提供進度提示, 可通過 xhr.upload.onprogress 事件回調(diào)方法獲取傳輸進度.

依然受 同源策略 限制, 這個安全機制不會變. XHR2新提供 Access-Control-Allow-Origin 等headers, 設(shè)置為 * 時表示允許任何域名請求, 從而實現(xiàn)跨域CORS訪問(有關(guān)CORS詳細(xì)介紹請耐心往下讀).

可以設(shè)置timeout 及 ontimeout, 方便設(shè)置超時時長和超時后續(xù)處理.

這里就H5新增的FormData對象舉個例.

//可直接創(chuàng)建FormData實例
var data = new FormData();
data.append("name", "louis");
xhr.send(data);
//還可以通過傳入表單DOM對象來創(chuàng)建FormData實例
var form = document.getElementById("form");
var data = new FormData(form);
data.append("password", "123456");
xhr.send(data);

目前, 主流瀏覽器基本上都支持XHR2, 除了IE系列需要IE10及更高版本. 因此IE10以下是不支持XHR2的.

那么問題來了, IE7, 8,9的用戶怎么辦? 很遺憾, 這些用戶是比較尷尬的. 對于IE8,9而言, 只有一個閹割版的 XDomainRequest 可用,IE7則沒有. 估計IE7用戶只能哭暈在廁所了.

XDomainRequest

XDomainRequest 對象是IE8,9折騰出來的, 用于支持CORS請求非成熟的解決方案. 以至于IE10中直接移除了它, 并重新回到了 XMLHttpRequest 的懷抱.

XDomainRequest 僅可用于發(fā)送 GET POST 請求. 如下即創(chuàng)建過程.

var xdr = new XDomainRequest();

xdr具有如下屬性:

timeout

responseText

如下方法:

open: 只能接收Method,和url兩個參數(shù). 只能發(fā)送異步請求.

send

abort

如下事件回調(diào):

onprogress

ontimeout

onerror

onload

除了缺少一些方法外, XDomainRequest 基本上就和 XMLHttpRequest 的使用方式保持一致.

必須要明確的是:

XDomainRequest 不支持跨域傳輸cookie.

只能設(shè)置請求頭的Content-Type字段, 且不能訪問響應(yīng)頭信息.

$.ajax

$.ajax是jquery對原生ajax的一次封裝. 通過封裝ajax, jquery抹平了不同版本瀏覽器異步http的差異性, 取而代之的是高度統(tǒng)一的api. jquery作為js類庫時代的先驅(qū), 對前端發(fā)展有著深遠(yuǎn)的影響. 了解并熟悉其ajax方法, 不可謂不重要.

參數(shù)列表

$.ajax() 只有一個參數(shù), 該參數(shù)為key-value設(shè)置對象. 實際上, jq發(fā)送的所有ajax請求, 都是通過調(diào)用該ajax方法實現(xiàn)的. 它的詳細(xì)參數(shù)如下表:

序號 參數(shù) 類型 描述
1 accepts PlainObject 用于通知服務(wù)器該請求需要接收何種類型的返回結(jié)果. 如有必要, 推薦在 $.ajaxSetup()?方法中設(shè)置一次.
2 async Boolean 默認(rèn)為true, 即異步.
3 beforeSend Function 請求發(fā)送前的回調(diào), 默認(rèn)傳入?yún)?shù)jqXHR和settings. 函數(shù)內(nèi)顯式返回false將取消本次請求.
4 cache Boolean 請求是否開啟緩存, 默認(rèn)為true, 如不需要緩存請設(shè)置為false. 不過, dataType為"script"和"jsonp"時默認(rèn)為false.
5 complete Function 請求完成后的回調(diào)(請求success?和?error之后均調(diào)用), 默認(rèn)傳入?yún)?shù)jqXHR和textStatus(請求狀態(tài), 取值為 "success","notmodified","error","timeout","abort","parsererror"之一). 從jq1.5開始, complete可以設(shè)置為一個包含函數(shù)的數(shù)組. 如此每個函數(shù)將依次被調(diào)用.
6 contents PlainObject 一個以"{字符串/正則表達式}"配對的對象, 根據(jù)給定的內(nèi)容類型, 解析請求的返回結(jié)果.
7 contentType String 編碼類型, 相對應(yīng)于http請求頭域的"Content-Type"字段. 默認(rèn)值為"application/x-www-form-urlencoded; charset=UTF-8".
8 context Object 設(shè)置ajax回調(diào)函數(shù)的上下文. 默認(rèn)上下文為ajax請求傳入的參數(shù)設(shè)置對象. 如設(shè)置為document.body, 那么所有ajax回調(diào)函數(shù)中將以body為上下文.
9 converters PlainObject 一個數(shù)據(jù)類型到數(shù)據(jù)類型轉(zhuǎn)換器的對象. 默認(rèn)為 {"* text": window.String, "text html": true, "text json": jQuery.parseJSON, "text xml": jQuery.parseXML} . 如設(shè)置converters:{"json jsonp": function(msg){}}
10 crossDomain Boolean 默認(rèn)同域請求為false, 跨域請求為true.
11 data Object, Array 發(fā)送到服務(wù)器的數(shù)據(jù), 默認(rèn)data為鍵值對格式對象, 若data為數(shù)組則按照traditional參數(shù)的值, 自動轉(zhuǎn)化為一個同名的多值查詢字符串. 如{a:1,b:2}將轉(zhuǎn)換為"&a=1&b=2".
12 dataFilter Function 處理XMLHttpRequest原始響應(yīng)數(shù)據(jù)的回調(diào), 默認(rèn)傳入data和type參數(shù), data是Ajax返回的原始數(shù)據(jù), type是調(diào)用$.ajax時提供的dataType參數(shù)
13 dataType String 預(yù)期服務(wù)器返回的數(shù)據(jù)類型, 可設(shè)置為"xml","html","script","json","jsonp","text"之一, 其中設(shè)置為"xml"或"text"類型時, 數(shù)據(jù)不會經(jīng)過處理.
14 error Function 請求失敗時的回調(diào)函數(shù), 默認(rèn)傳入jqXHR(jq1.4以前為原生xhr對象),textStatus(請求狀態(tài),取值為null,"timeout","error","abort" 或 "parsererror"),errorString(錯誤內(nèi)容), 當(dāng)一個HTTP錯誤發(fā)生時, errorThrown?接收HTTP狀態(tài)的文本部分,比如"Not Found"等. 從jq1.5開始, error可以設(shè)置為一個包含函數(shù)的數(shù)組. 如此每個函數(shù)將依次被調(diào)用.注意: 跨域腳本和JSONP請求時error不被調(diào)用.
15 global Boolean 表示是否觸發(fā)全局ajax事件, 默認(rèn)為true. 設(shè)為false將不再觸發(fā)ajaxStart,ajaxStop,ajaxSend,ajaxError等. 跨站腳本和jsonp請求, 該值自動設(shè)置為false.
16 headers PlainObject 設(shè)置請求頭, 格式為k-v鍵值對對象. 由于該設(shè)置會在beforeSend函數(shù)被調(diào)用之前生效, 因此可在beforeSend函數(shù)內(nèi)覆蓋該對象.
17 ifModified Boolean 只有上次請求響應(yīng)改變時, 才允許請求成功. 它使用HTTP包的Last-Modified 頭信息判斷, 默認(rèn)為false. 若設(shè)置為true, 且數(shù)據(jù)自從上次請求后沒有更改過就會報錯.
18 isLocal Boolean 運行當(dāng)前環(huán)境設(shè)置為"本地",默認(rèn)為false, 若設(shè)置為true, 將影響請求發(fā)送時的協(xié)議.
19 jsonp String 顯式指定jsonp請求中的回調(diào)函數(shù)的名稱. 如jsonp:cb, jq會將cb代替callback, 以 "cb=?"傳給服務(wù)器. 從jq1.5開始, 若設(shè)置jsonp:false, 那么需要明確設(shè)置jsonpCallback:"callbackName".
20 jsonpCallback String,Function 為jsonp請求指定一個回調(diào)函數(shù)名, 以取代jq自動生成的隨機函數(shù)名. 從jq1.5開始, 可以將該屬性設(shè)置為一個函數(shù), 函數(shù)的返回值就是jsonpCallback的結(jié)果.
21 mimeType String 設(shè)置一個MIME類型, 以覆蓋xhr的MIM類型(jq1.5新增)
22 password String 設(shè)置認(rèn)證請求中的密碼
23 processData Boolean jq的ajax方法默認(rèn)會將傳入的data隱式轉(zhuǎn)換為查詢字符串(如"&a=1&b=2"), 以配合 默認(rèn)內(nèi)容類型 "application/x-www-form-urlencoded", 如果不希望轉(zhuǎn)換請設(shè)置為false. angular中想要禁用默認(rèn)轉(zhuǎn)換, 需要重寫transformRequest方法.
24 scriptCharset String 僅在"script"請求中使用(如跨域jsonp, dataType為"script"類型). 顯式指定時, 請求中將在script標(biāo)簽上設(shè)置charset屬性, 可在發(fā)現(xiàn)本地和遠(yuǎn)程編碼不一致時使用.
25 statusCode PlainObject 一組http狀態(tài)碼和回調(diào)函數(shù)對應(yīng)的鍵值對對象. 該對象以 {404:function(){}} 這種形式表示. 可用于根據(jù)不同的http狀態(tài)碼, 執(zhí)行不同的回調(diào).(jq1.5新增)
26 timeout Number 設(shè)置超時時間.
27 traditional Boolean 是否按照默認(rèn)方式序列化data對象, 默認(rèn)值為false.
28 type String 可以設(shè)置為8種http method之一, jq中不區(qū)分大小寫.
29 url String 請求的uri地址.
30 username String 設(shè)置認(rèn)證請求中的用戶名
31 xhr Function 在回調(diào)內(nèi)創(chuàng)建并返回xhr對象
32 xhrFields PlainObject 鍵值對對象, 用于設(shè)置原生的xhr對象, 如可用來設(shè)置withCredentials:true(jq1.5.1新增)
支持promise

$.ajax() 方法返回jqXHR對象(jq1.5起), 如果使用的不是XMLHttpRequest對象時, 如jsonp請求, 返回的jqXHR對象將盡可能模擬原生的xhr. 從jq1.5起, 返回的jqXHR對象實現(xiàn)了promise接口, 具有如下新方法.

新方法 被替代的老方法(jq1.8起棄用)
done(function(data, textStatus, jqXHR) {}) success
fail(function(jqXHR, textStatus, errorThrown) {}) error
always(function(data or jqXHR, textStatus, jqXHR or errorThrown) {}) complete

從jq1.6開始, done, fail, always按照FIFO隊列可以分配多個回調(diào).

使用轉(zhuǎn)換器

$.ajax() 的轉(zhuǎn)換器可以將支持的數(shù)據(jù)類型映射到其它數(shù)據(jù)類型. 如果需要將自定義數(shù)據(jù)類型映射到已知的類型. 需要使用 contents 選項在響應(yīng)的 "Content-Type" 和實際數(shù)據(jù)類型之間添加一個轉(zhuǎn)換函數(shù).

$.ajaxSetup({
  contents: {
    myContentType: /myContentType/
  },
  converters: {
    "myContentType json": function(data) {
      //TODO something
      return newData;
    }
  }
});

轉(zhuǎn)換一個支持的類型為自定義類型, 然后再返回. 如 text—>myContentType—>json.

$.ajaxSetup({
  contents: {
    myContentType: /myContentType/
  },
  converters: {
    "text myContentType": true,
    "myContentType json": function(data) {
      //TODO something
      return newData;
    }
  }
});
事件觸發(fā)順序

$.ajax()方法觸發(fā)的事件紛繁復(fù)雜, 有將近20個之多. 為了囊括最多的事件, 這里以一次成功的上傳請求為例, 以下是它們的調(diào)用順序(請求出現(xiàn)錯誤時的順序, 請自行對應(yīng)).

序號 事件名稱 是否全局事件 是否能關(guān)閉 默認(rèn)形參
1 $.ajaxPrefilter ?? ? function(options, originalOptions, jqXHR){}
2 $(document).ajaxStar ?? ?? function(){}(只在當(dāng)前無激活ajax時觸發(fā))
3 beforeSend ? - function(jqXHR, settings){}
4 $(document).ajaxSend ?? ?? function(){}
5 xhr.onloadstart - - ProgressEvent
6 xhr.upload.onloadstart - - ProgressEvent
7 xhr.upload.onprogress - - ProgressEvent
8 xhr.upload.onload - - ProgressEvent
9 xhr.upload.onloadend - - ProgressEvent
10 xhr.onprogress - - ProgressEvent
11 xhr.onload - - ProgressEvent
12 success(棄用) ? - function(data, textStatus, jqXHR){}
13 $(document).ajaxSuccess ?? ?? function(event, jqXHR, options){}
14 complete(棄用) ? - function(jqXHR, textStatus){}
15 $(document).ajaxComplete ?? ?? function(event, jqXHR, textStatus)
16 $(document).ajaxStop ?? ?? function(){}
17 xhr.onloadend - - ProgressEvent

從jq1.8起, 對于函數(shù) ajaxStart, ajaxSend, ajaxSuccess, ajaxComplete, ajaxStop , 只能為document對象綁定事件處理函數(shù), 為其他元素綁定的事件處理函數(shù)不會起作用.

Axios

實際上, 如果你僅僅只是想要一個不錯的http庫, 相比于龐大臃腫的jquery, 短小精悍的Axios可能更加適合你. 原因如下:

Axios支持node, jquery并不支持.

Axios基于promise語法, jq3.0才開始全面支持.

Axios短小精悍, 更加適合http場景, jquery大而全, 加載較慢.

vue作者尤大放棄推薦vue-resource, 轉(zhuǎn)向推薦Axios. 以下為尤大原話.

"最近團隊討論了一下, Ajax 本身跟 Vue 并沒有什么需要特別整合的地方, 使用 fetch polyfill 或是 axios、superagent 等等都可以起到同等的效果, vue-resource 提供的價值和其維護成本相比并不劃算, 所以決定在不久以后取消對 vue-resource 的官方推薦."

Axios大小僅12k, 目前最新版本號為:

語法上Axios基本就和promise一樣, 在then方法中處理回調(diào), 在catch方法中處理異常. 如下:

axios.get("https://api.github.com/users/louiszhai")
  .then(function(response){
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

除了get, 它還支持post, delete, head, put, patch, request請求. 具體使用攻略, 請戳這里: axios .

如需在網(wǎng)頁上引入 Axios, 可以鏈接CDN axios | Bootstrap中文網(wǎng)開源項目免費 CDN 服務(wù) 或者將其下載到本地.

Fetch

說到ajax, 就不得不提及fetch, 由于篇幅較長, fetch已從本文中獨立出來, 請戳 Fetch進階指南 .

ajax跨域請求 什么是CORS

CORS是一個W3C(World Wide Web)標(biāo)準(zhǔn), 全稱是跨域資源共享(Cross-origin resource sharing).它允許瀏覽器向跨域服務(wù)器, 發(fā)出異步http請求, 從而克服了ajax受同源策略的限制. 實際上, 瀏覽器不會攔截不合法的跨域請求, 而是攔截了他們的響應(yīng), 因此即使請求不合法, 很多時候, 服務(wù)器依然收到了請求.(Chrome和Firefox下https網(wǎng)站不允許發(fā)送http異步請求除外)

通常, 一次跨域訪問擁有如下流程:

移動端CORS兼容性

當(dāng)前幾乎所有的桌面瀏覽器(Internet Explorer 8+, Firefox 3.5+, Safari 4+和 Chrome 3+)都可通過名為跨域資源共享的協(xié)議支持ajax跨域調(diào)用.

那么移動端兼容性又如何呢? 請看下圖:

可見, CORS的技術(shù)在IOS Safari7.1及Android webview2.3中就早已支持, 即使低版本下webview的canvas在使用跨域的video或圖片時會有問題, 也絲毫不影響CORS的在移動端的使用. 至此, 我們就可以放心大膽的去應(yīng)用CORS了.

CORS有關(guān)的headers

1) HTTP Response Header(服務(wù)器提供):

Access-Control-Allow-Origin: 指定允許哪些源的網(wǎng)頁發(fā)送請求.

Access-Control-Allow-Credentials: 指定是否允許cookie發(fā)送.

Access-Control-Allow-Methods: 指定允許哪些請求方法.

Access-Control-Allow-Headers: 指定允許哪些常規(guī)的頭域字段, 比如說 Content-Type.

Access-Control-Expose-Headers: 指定允許哪些額外的頭域字段, 比如說 X-Custom-Header.

該字段可省略. CORS請求時, xhr.getResponseHeader() 方法默認(rèn)只能獲取6個基本字段: Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma . 如果需要獲取其他字段, 就需要在Access-Control-Expose-Headers 中指定. 如上, 這樣xhr.getResponseHeader("X-Custom-Header") 才能返回X-Custom-Header字段的值.(該部分摘自阮一峰老師博客)

Access-Control-Max-Age: 指定preflight OPTIONS請求的有效期, 單位為秒.

2) HTTP Request Header(瀏覽器OPTIONS請求默認(rèn)自帶):

Access-Control-Request-Method: 告知服務(wù)器,瀏覽器將發(fā)送哪種請求, 比如說POST.

Access-Control-Request-Headers: 告知服務(wù)器, 瀏覽器將包含哪些額外的頭域字段.

3) 以下所有的header name 是被拒絕的:

Accept-Charset

Accept-Encoding

Access-Control-Request-Headers

Access-Control-Request-Method

Connection

Content-Length

Cookie

Cookie2

Date

DNT

Expect

Host

Keep-Alive

Origin

Referer

TE

Trailer

Transfer-Encoding

Upgrade

Via

包含以Proxy-Sec- 開頭的header name

CORS請求

CORS請求分為兩種, ① 簡單請求; ② 非簡單請求.

滿足如下兩個條件便是簡單請求, 反之則為非簡單請求.(CORS請求部分摘自阮一峰老師博客)

1) 請求是以下三種之一:

HEAD

GET

POST

2) http頭域不超出以下幾種字段:

Accept

Accept-Language

Content-Language

Last-Event-ID

Content-Type字段限三個值 application/x-www-form-urlencodedmultipart/form-data、text/plain

對于簡單請求, 瀏覽器將發(fā)送一次http請求, 同時在Request頭域中增加 Origin 字段, 用來標(biāo)示請求發(fā)起的源, 服務(wù)器根據(jù)這個源采取不同的響應(yīng)策略. 若服務(wù)器認(rèn)為該請求合法, 那么需要往返回的 HTTP Response 中添加 Access-Control-* 等字段.( Access-Control-* 相關(guān)字段解析請閱讀我之前寫的CORS 跨域訪問 )

對于非簡單請求, 比如Method為POST且Content-Type值為 application/json 的請求或者Method為 PUTDELETE 的請求, 瀏覽器將發(fā)送兩次http請求. 第一次為preflight預(yù)檢(Method: OPTIONS),主要驗證來源是否合法. 值得注意的是:OPTION請求響應(yīng)頭同樣需要包含 Access-Control-* 字段等. 第二次才是真正的HTTP請求. 所以服務(wù)器必須處理OPTIONS應(yīng)答(通常需要返回20X的狀態(tài)碼, 否則xhr.onerror事件將被觸發(fā)).

以上請求流程圖為:

HTML啟用CORS

http-equiv 相當(dāng)于http的響應(yīng)頭, 它回應(yīng)給瀏覽器一些有用的信息,以幫助正確和精確地顯示網(wǎng)頁內(nèi)容. 如下html將允許任意域名下的網(wǎng)頁跨域訪問.

圖片啟用CORS

通常, 圖片允許跨域訪問, 也可以在canvas中使用跨域的圖片, 但這樣做會污染畫布, 一旦畫布受污染, 將無法讀取其數(shù)據(jù). 比如無法調(diào)用 toBlob(), toDataURL() 或 getImageData()方法. 瀏覽器的這種安全機制規(guī)避了未經(jīng)許可的遠(yuǎn)程服務(wù)器圖片被濫用的風(fēng)險.(該部分內(nèi)容摘自 啟用了 CORS 的圖片 - HTML(超文本標(biāo)記語言) | MDN)

因此如需在canvas中使用跨域的圖片資源, 請參考如下apache配置片段(來自HTML5 Boilerplate Apache server configs).


    
        
            SetEnvIf Origin ":" IS_CORS
            Header set Access-Control-Allow-Origin "*" env=IS_CORS
        
    
ajax文件上傳

ajax實現(xiàn)文件上傳非常簡單, 這里我選取原生js, jq, angular 分別來比較下, 并順便聊聊使用它們時的注意事項.(ajax文件上傳的代碼已上傳至github, 請戳這里預(yù)覽效果: ajax 文件上傳 demo | louis)

1) 為了上傳文件, 我們得先選中一個文件. 一個type為file的input框就夠了.

2) 然后用FormData對象包裹?選中的文件.

var input = document.getElementById("input"),
    formData = new FormData();
formData.append("file",input.files[0]);//key可以隨意定義,只要后臺能理解就行

3) 定義上傳的URL, 以及方法. github上我搭建了一個 node-webserver, 根據(jù)需要可以自行克隆下來npm start后便可調(diào)試本篇代碼.

var url = "http://localhost:10108/test",
    method = "POST";
js文件上傳

4.1) 封裝一個用于發(fā)送ajax請求的方法.

function ajax(url, method, data){
  var xhr = null;
  if(window.XMLHttpRequest) {
    xhr = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    try {
      xhr = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) { 
        alert("您的瀏覽器暫不支持Ajax!");
      }
    }
  }
  xhr.onerror = function(e){
    console.log(e);
  }
  xhr.open(method, url);
  try{
    setTimeout(function(){
      xhr.send(data);
    });
  }catch(e){
    console.log("error:",e);
  }
  return xhr;
}

4.2) 上傳文件并綁定事件.

var xhr = ajax(url, method, formData);
xhr.upload.onprogress = function(e){
  console.log("upload progress:", e.loaded/e.total*100 + "%");
};
xhr.upload.onload = function(){
  console.log("upload onload.");
};
xhr.onload = function(){
  console.log("onload.");
}

上傳結(jié)果如下所示:

fetch上傳

5) fetch只要發(fā)送一個post請求, 并且body屬性設(shè)置為formData即可. 遺憾的是, fetch無法跟蹤上傳的進度信息.

fetch(url, {
  method: method,
  body: formData
  }).then(function(res){
  console.log(res);
  }).catch(function(e){
  console.log(e);
});
jquery文件上傳

jq提供了各式各樣的上傳插件, 其原理都是利用jq自身的ajax方法.

6) jq的ajax提供了xhr屬性用于自定義各種事件.

$.ajax({
  type: method,
  url: url,
  data: formData,
  processData : false,
  contentType : false ,//必須false才會自動加上正確的Content-Type
  xhr: function(){
    var xhr = $.ajaxSettings.xhr();//實際上就是return new window.XMLHttpRequest()對象
    if(xhr.upload) {
      xhr.upload.addEventListener("progress", function(e){
        console.log("jq upload progress:", e.loaded/e.total*100 + "%");
      }, false);
      xhr.upload.addEventListener("load", function(){
        console.log("jq upload onload.");
      });
      xhr.addEventListener("load", function(){
        console.log("jq onload.");
      });
      return xhr;
    }
  }
});

jq上傳結(jié)果如下所示:

有關(guān)jq ajax更多的api, 請參考中文文檔 jQuery.ajax() | jQuery API 中文文檔 .

angular文件上傳

7.1) angular提供了$http方法用于發(fā)送http請求, 該方法返回一個promise對象.

$http({
  method: method,
  url: url,
  data: formData,
}).success(function(res) {
  console.log(res);
}).error(function(err, status) {
  console.log(err);
});

angular文件上傳的代碼已上傳至github, 請戳這里預(yù)覽效果: angular 文件上傳 demo | louis.

低版本angular中文件上傳的功能并不完整, 直到angular1.5.5才在$http中加入了eventHandler和uploadEventHandlers等方法, 使得它支持上傳進度信息. 如下:

$http({
  method: method,
  url: url,
  eventHandlers: {
    progress: function(c) {//下載進度
      console.log("Progress -> " + c);
    }
  },
  uploadEventHandlers: {
    progress: function(e) {//上傳進度
      console.log("UploadProgress -> " + e);
    }
  },
  data: formData,
}).success(function(res) {
  console.log(res);
}).error(function(err, status) {
  console.log(err);
});

angular1.5.5以下低版本中, 請參考成熟的實現(xiàn)方案 angular-file-upload 以及它提供的demo Simple example .

ajax請求二進制文件 FileReader

處理二進制文件主要使用的是H5的FileReader.

PC支持性如下:

IE Edge Firefox Chrome Safari Opera
10 12 3.6 6 6 11.5

Mobile支持性如下:

IOS Safari Opera Mini Android Browser Chrome/Android UC/Android
7.1 - 4 53 11

以下是其API:

屬性/方法名稱 描述
error 表示讀取文件期間發(fā)生的錯誤.
readyState 表示讀取文件的狀態(tài).默認(rèn)有三個值:0表示文件還沒有加載;1表示文件正在讀取;2表示文件讀取完成.
result 讀取的文件內(nèi)容.
abort() 取消文件讀取操作, 此時readyState屬性將置為2.
readAsArrayBuffer() 讀取文件(或blob對象)為類型化數(shù)組(ArrayBuffer), 類型化數(shù)組允許開發(fā)者以數(shù)組下標(biāo)的方式, 直接操作內(nèi)存, 由于數(shù)據(jù)以二進制形式傳遞, 效率非常高.
readAsBinaryString() 讀取文件(或blob對象)為二進制字符串, 該方法已移出標(biāo)準(zhǔn)api, 請謹(jǐn)慎使用.
readAsDataURL() 讀取文件(或blob對象)為base64編碼的URL字符串, 與window.URL.createObjectURL方法效果類似.
readAsText() 讀取文件(或blob對象)為文本字符串.
onload() 文件讀取完成時的事件回調(diào), 默認(rèn)傳入event事件對象. 該回調(diào)內(nèi), 可通過this.result 或 event.target.result獲取讀取的文件內(nèi)容.
ajax請求二進制圖片并預(yù)覽
var xhr = new XMLHttpRequest(),
    url = "http://louiszhai.github.io/docImages/ajax01.png";
xhr.open("GET", url);
xhr.responseType = "blob";
xhr.onload = function(){
  if(this.status == 200){
    var blob = this.response;
    var img = document.createElement("img");
    //方案一
    img.src = window.URL.createObjectURL(blob);//這里blob依然占據(jù)著內(nèi)存
    img.onload = function() {
      window.URL.revokeObjectURL(img.src);//釋放內(nèi)存
    };
    //方案二
    /*var reader = new FileReader();
    reader.readAsDataURL(blob);//FileReader將返回base64編碼的data-uri對象
    reader.onload = function(){
      img.src = this.result;
    }*/
    //方案三
    //img.src = url;//最簡單方法
    document.body.appendChild(img);
  }
}
xhr.send();
ajax請求二進制文本并展示
var xhr = new XMLHttpRequest();
xhr.open("GET","http://localhost:8080/Information/download.jsp?data=node-fetch.js");
xhr.responseType = "blob";
xhr.onload = function(){
  if(this.status == 200){
    var blob = this.response;
    var reader = new FileReader();
    reader.readAsBinaryString(blob);//該方法已被移出標(biāo)準(zhǔn)api,建議使用reader.readAsText(blob);
    reader.onload=function(){
      document.body.innerHTML = "
" + this.result + "
"; } } } xhr.send();

有關(guān)二進制文件的讀取, 請移步這篇博客 HTML5新特性之文件和二進制數(shù)據(jù)的操作 .

如何等待多個ajax請求完成

原生js可以使用ES6新增的Promise. ES6的Promise基于 Promises/A+ 規(guī)范(該部分 Fetch入門指南 一文也有提及).

這里先提供一個解析responses的函數(shù).

function todo(responses){
  responses.forEach(function(response){
    response.json().then(function(res){
      console.log(res);
    });
  });
}

原生js使用 Promise.all 方法. 如下:

var p1 = fetch("http://localhost:10108/test1"),
    p2 = fetch("http://localhost:10108/test2");
Promise.all([p1, p2]).then(function(responses){
  todo(responses);
  //TODO do somethings
});
//"test1"
//"test2"

jquery可以使用$.when方法. 該方法接受一個或多個Deferred對象作為參數(shù), 只有全部成功才調(diào)用resolved狀態(tài)的回調(diào)函數(shù), 但只要其中有一個失敗,就調(diào)用rejected狀態(tài)的回調(diào)函數(shù). 其實, jq的Deferred是基于 Promises/A規(guī)范實現(xiàn), 但并非完全遵循. (傳送門: jQuery 中的 Deferred 和 Promises (2) ).

var p1 = $.ajax("http://localhost:10108/test1"),
    p2 = $.ajax("http://localhost:10108/test2");
$.when(p1, p2).then(function(res1, res2){
  console.log(res1);//["test1", "success", Object]
  console.log(res2);//["test2", "success", Object]
  //TODO do somethings
});

如上, $.when默認(rèn)返回一個jqXHR對象, 可以直接進行鏈?zhǔn)秸{(diào)用. then方法的回調(diào)中默認(rèn)傳入相應(yīng)的請求結(jié)果, 每個請求結(jié)果的都是數(shù)組, 數(shù)組中依次是responseText, 請求狀態(tài), 請求的jqXHR對象.

angular中可以借助 $q.all() 來實現(xiàn). 別忘了, $q 需要在controller中注入. 此外, $q 相關(guān)講解可參考 AngularJS: ng.$q 或 Angular $q service學(xué)習(xí)筆記 .

var p1 = fetch("http://localhost:10108/test1"),
    p2 = fetch("http://localhost:10108/test2");
$q.all([p1, p2]).then(function(responses){
  todo(responses);
  //TODO do somethings
});
//"test1"
//"test2"

$q.all() 實際上就是對 Promise.all 的封裝.

ajax與history的兼容

ajax的一大痛點就是無法支持瀏覽器前進和后退操作. 因此早期的Gmail 采用 iframe, 來模擬ajax的前進和后退.

如今, H5普及, pjax大行其道. pajax 就是 ajax+history.pushState 組合的一種技術(shù). 使用它便可以無刷新通過瀏覽器前進和后退來改變頁面內(nèi)容.

先看下兼容性.

IE Edge Firefox Chrome Safari Opera iOS Safari Android Browser Chrome for Android
pushState/replaceState 10 12 4 5 6 11.5 7.1 4.3 53
history.state 10 4 18 6 11.5

可見IE8,9并不能使用 H5的history. 需要使用墊片 HTML5 History API expansion for browsers not supporting pushState, replaceState .

pjax

pjax簡單易用, 僅需要如下三個api:

history.pushState(obj, title, url) 表示往頁面history末尾新增一個歷史項(history entry), 此時history.length會+1.

history.replaceState(obj, title, url) 表示替換當(dāng)前歷史項為新的歷史項. 此時history.length保持不變.

window.onpopstate 僅在瀏覽器前進和后退時觸發(fā)(history.go(1), history.back() 及l(fā)ocation.href="xxx" 均會觸發(fā)), 此時可在history.state中拿到剛剛?cè)M去的state, 即obj對象(其他數(shù)據(jù)類型亦可).

我們注意到, 首次進入一個頁面, 此時 history.length 值為1, history.state 為空. 如下:

1) 為了在onpopstate事件回調(diào)中每次都能拿到 history.state , 此時需要在頁面載入完成后, 自動替換下當(dāng)前url.

history.replaceState("init", title, "xxx.html?state=0");

2) 每次發(fā)送ajax請求時, 在請求完成后, 調(diào)用如下, 從而實現(xiàn)瀏覽器history往前進.

history.pushState("ajax請求相關(guān)參數(shù)", title, "xxx.html?state=標(biāo)識符");

3) 瀏覽器前進和后退時, popstate 事件會自動觸發(fā), 此時我們手動取出 history.state , 構(gòu)建參數(shù)并重新發(fā)送ajax請求或者直接取用state值, 從而實現(xiàn)無刷新還原頁面.

window.addEventListener("popstate", function(e) {
    var currentState = history.state;
    //TODO 拼接ajax請求參數(shù)并重新發(fā)送ajax請求, 從而回到歷史頁面
      //TODO 或者從state中拿到關(guān)鍵值直接還原歷史頁面
});

popstate 事件觸發(fā)時, 默認(rèn)會傳入 PopStateEvent 事件對象. 該對象具有如下屬性.

如有不懂, 更詳細(xì)講解請移步 : ajax與HTML5 history pushState/replaceState實例 ? 張鑫旭-鑫空間-鑫生活 .

ajax緩存處理

js中的http緩存沒有開關(guān), 受制于瀏覽器http緩存策略. 原生xhr請求中, 可通過如下設(shè)置關(guān)閉緩存.

xhr.setRequestHeader("If-Modified-Since","0");
xhr.setRequestHeader("Cache-Control","no-cache");
//或者 URL 參數(shù)后加上  "?timestamp=" + new Date().getTime()

jquery的http緩存是否開啟可通過在settings中指定cache.

$.ajax({
  url : "url",
  dataType : "xml",
  cache: true,//true表示緩存開啟, false表示緩存不開啟
  success : function(xml, status){    
  }
});

同時jquery還可以全局設(shè)置是否緩存. 如下將全局關(guān)閉ajax緩存.

$.ajaxSetup({cache:false});

除此之外, 調(diào)試過程中出現(xiàn)的瀏覽器緩存尤為可惡. 建議開啟隱私瀏覽器或者勾選??控制臺的 Disable cache 選項. (這里以Chrome舉例, 其他瀏覽器類似)

ajax的錯誤處理

前面已經(jīng)提過, 通常只要是ajax請求收到了http狀態(tài)碼, 便不會進入到錯誤捕獲里.(Chrome中407響應(yīng)頭除外)

實際上, $.ajax 方法略有區(qū)別, jquery的ajax方法還會在類型解析出錯時觸發(fā)error回調(diào). 最常見的便是: dataType設(shè)置為json, 但是返回的data并非json格式, 此時 $.ajax 的error回調(diào)便會觸發(fā).

ajax調(diào)試技巧

有關(guān)調(diào)試, 如果接口只是做小部分修改. 那么可以使用charles(Mac) 或者fiddler(Windows), 做代理, 將請求的資源替換為本地文件, 或者使用其斷點功能, 直接編輯response.

如果是新增接口的調(diào)試, 可以本地搭建node服務(wù). 利用hosts文件配置dns + nginx將http請求轉(zhuǎn)發(fā)到本地node服務(wù)器. 簡易的node調(diào)試服務(wù)器可參考我的 node-webserver . 如下舉一個栗子?:

hosts+nginx+node-webserver

假設(shè)我們要調(diào)試的是 www.test.com 的GET接口. 以下所有步驟以Mac為例, 其他系統(tǒng), 請自行搜索?文件路徑.

1) hosts配置.

sudo vim /etc/hosts
#新增一行 127.0.0.1 www.test.com

2) nginx 配置

brew install nginx #安裝
#安裝成功后進入目標(biāo)目錄
cd /usr/local/etc/nginx/
cd servers #默認(rèn)配置入口為nginx.conf.同時servers目錄下*.conf文件已自動加入到配置文件列表中
vim test.conf
#粘貼如下內(nèi)容
server {
  listen       80;
  server_name  www.test.com;
  index index.html;
  error_page   500 502 503 504  /50x.html;
  location = /50x.html {
      root   html;
  }
  location / {
    proxy_pass http://localhost:10108/;
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header        X-Read-IP       $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}
#:wq保存并退出
#啟動nginx
sudo nginx -s reload #如果啟動了只需重啟即可
sudo nginx #如果沒有啟動,便啟動之

3) node-webServer 配置

參考 node-webserver . 啟動服務(wù)前只需更改index.js, 在第9行后插入如下內(nèi)容:

"get": {
  "/": {
      getKey : "Welcome to Simple Node  WebServer!"
  },
  "接口api": "你的response內(nèi)容"http://插入的代碼                               
},

如需在nginx中配置CORS, 請看這里: Nginx通過CORS實現(xiàn)跨域.

編碼問題

XMLHttpRequest 返回的數(shù)據(jù)默認(rèn)的字符編碼是utf-8, post方法提交數(shù)據(jù)默認(rèn)的字符編碼也是utf-8. 若頁面編碼為gbk等中文編碼, 那么就會產(chǎn)生亂碼.

后端接口測試技巧

通常, 如果后端接口開發(fā)OK了, 前端同學(xué)需要通過一些手段來確認(rèn)接口是能正常訪問的.

使用命令測試OPTIONS請求
curl -I -X OPTIONS -H "Origin: http://example.com" http://localhost:10108/
# response
HTTP/1.1 200 OK
X-Powered-By: Express
Content-Type: text/json;charset=UTF-8
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: x-requested-with,Content-Type
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Allow-Origin: http://example.com
Access-Control-Max-Age: 3600
Server: Node WebServer
Website: https://github.com/Louiszhai/node-webserver
Date: Fri, 21 Oct 2016 09:00:40 GMT
Connection: keep-alive
Transfer-Encoding: chunked

以上, http狀態(tài)碼為200, 表示允許OPTIONS請求.

GET, POST 請求與GET類似, 其他請求亦然.

curl -I -X GET -H "Origin: http://example.com" http://localhost:10108/
#HTTP/1.1 200 OK
curl -I -X POST -H "Origin: http://example.com" http://localhost:10108/test
#HTTP/1.1 200 OK
postman

除此之外, 我們還可以通過chrome的postman擴展進行測試. 請看postman素潔的界面:

postman支持所有類型的http請求, 由于其向chrome申請了cookie訪問權(quán)限及所有http(s)網(wǎng)站的訪問權(quán)限. 因此可以放心使用它進行各種網(wǎng)站api的測試.

同時, 強烈建議閱讀本文的你升級postman的使用技巧, 這里有篇: 基于Postman的API自動化測試 , 拿走不謝.

ajax移動端兼容性

移動端的支持性比較弱, 使用需謹(jǐn)慎. 看表.

        <
        IOS Safari Opera Mini Android Browser Android Chrome Android UC
        XMLHttpRequest 8.4 - 4.4.4 53

        文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

        轉(zhuǎn)載請注明本文地址:http://www.hztianpu.com/yun/81998.html

        相關(guān)文章

        • 前端開發(fā)收集 - 收藏集 - 掘金

          摘要:責(zé)編現(xiàn)代化的方式開發(fā)一個圖片上傳工具前端掘金對于圖片上傳,大家一定不陌生。之深入事件機制前端掘金事件綁定的方式原生的事件綁定方式有幾種想必有很多朋友說種目前,在本人目前的研究中,只有兩種半兩種半還有半種的且聽我道來。 Ajax 與數(shù)據(jù)傳輸 - 前端 - 掘金背景 在沒有ajax之前,前端與后臺傳數(shù)據(jù)都是靠表單傳輸,使用表單的方法傳輸數(shù)據(jù)有一個比較大的問題就是每次提交數(shù)據(jù)都會刷新頁面,用...

          ygyooo 評論0 收藏0
        • Deep in JS - 收藏集 - 掘金

          摘要:今天同學(xué)去面試,做了兩道面試題全部做錯了,發(fā)過來給道典型的面試題前端掘金在界中,開發(fā)人員的需求量一直居高不下。 排序算法 -- JavaScript 標(biāo)準(zhǔn)參考教程(alpha) - 前端 - 掘金來自《JavaScript 標(biāo)準(zhǔn)參考教程(alpha)》,by 阮一峰 目錄 冒泡排序 簡介 算法實現(xiàn) 選擇排序 簡介 算法實現(xiàn) ... 圖例詳解那道 setTimeout 與循環(huán)閉包的經(jīng)典面...

          enali 評論0 收藏0
        • javasscript - 收藏集 - 掘金

          摘要:跨域請求詳解從繁至簡前端掘金什么是為什么要用是的一種使用模式,可用于解決主流瀏覽器的跨域數(shù)據(jù)訪問的問題。異步編程入門道典型的面試題前端掘金在界中,開發(fā)人員的需求量一直居高不下。 jsonp 跨域請求詳解——從繁至簡 - 前端 - 掘金什么是jsonp?為什么要用jsonp?JSONP(JSON with Padding)是JSON的一種使用模式,可用于解決主流瀏覽器的跨域數(shù)據(jù)訪問的問題...

          Rango 評論0 收藏0
        • 查漏補缺 - 收藏集 - 掘金

          摘要:醞釀許久之后,筆者準(zhǔn)備接下來撰寫前端面試題系列文章,內(nèi)容涵蓋瀏覽器框架分鐘搞定常用基礎(chǔ)知識前端掘金基礎(chǔ)智商劃重點在實際開發(fā)中,已經(jīng)非常普及了。 這道題--致敬各位10年阿里的前端開發(fā) - 掘金很巧合,我在認(rèn)識了兩位同是10年工作經(jīng)驗的阿里前端開發(fā)小伙伴,不但要向前輩學(xué)習(xí),我有時候還會選擇另一種方法逗逗他們,拿了網(wǎng)上一道經(jīng)典面試題,可能我連去阿里面試的機會都沒有,但是我感受到了一次面試1...

          YuboonaZhang 評論0 收藏0
        • HTML-CSS

          摘要:但是,從字體上來說雪碧圖制作,使用以及相關(guān),圖文。由于采用了編譯,所以能夠保證在瀏覽器不支持標(biāo)準(zhǔn)布局的情況下,回滾到舊版本的,保證移動設(shè)備中能呈現(xiàn)出一樣的布局效果。我不想陷入和的紛爭,但是有一件事是確定的極大的提升了移動端 一勞永逸的搞定 flex 布局 尋根溯源話布局 一切都始于這樣一個問題:怎樣通過 CSS 簡單而優(yōu)雅的實現(xiàn)水平、垂直同時居中。記得剛開始學(xué)習(xí) CSS 的時候,看到 ...

          xiaokai 評論0 收藏0

        發(fā)表評論

        0條評論

        最新活動
        閱讀需要支付1元查看
        国产在线精品一区二区 | 69精品无码成人久久久久久 | 依人久久| 乱日视频 | 久久免费在线视频 | 淫视频在线观看 | 欧美 日韩 综合 | 国产亚洲色婷婷久久 | 女同vk| 欧美第二页 | 樱桃香蕉视频 | 最好看的2019免费观看 | 蜜桃精品视频在线 | 精品美女一区二区三区 | 日本妈妈9| 青青草日本| 人人爱操 | 久久综合99 | 国产亚洲在线观看 | 久热只有精品 | 国产日韩欧美中文字幕 | 天天摸夜夜添狠狠添婷婷 | 草民午夜理伦三级 | 国产青青草视频 | 国产精品久久久久久吹潮 | 白又丰满大屁股bbbbb | 成人做爰视频www | 国产乱乱| 亚洲成年人av | 草民午夜理伦三级 | av影院在线观看 | 亚洲特级毛片 | 奇米久久 | a级小视频| 日本精品一区二区三区视频 | 欧美成人小视频 | 性视频播放免费视频 | 久草99| 樱桃香蕉视频 | 97超碰成人| 成人影片在线播放 | 全是肉的高h文〈男男〉 | 污视频网站免费看 | 特黄aaaaaaaaa毛片免费视频 | 日韩精品在线视频观看 | 中国a级黄色片 | 五月天久久久久久 | 四虎在线免费观看 | 日韩电影院 | 蜜桃av噜噜一区二区三区麻豆 | 中文字幕丰满乱子伦无码专区 | 亚洲国产成人精品女人久久久 | 久久久久久亚洲av无码专区 | 国产在线看片 | 欧美片网站免费 | 男女日批视频 | 能免费看av的网站 | 女同黄色小说 | 久久这里有 | 日韩成人一区二区 | 在线欧美| 亚洲自拍偷拍网站 | 91麻豆精品一二三区在线 | 青青草激情视频 | 性一交一乱一区二区洋洋av | 橹图极品美女无圣光 | 免费在线国产视频 | 成人黄色一级 | 总裁憋尿呻吟双腿大开憋尿 | 中文字幕女同女同女同 | 亚洲三级精品 | 成人污视频在线观看 | 91久久久久久久久久久 | 老司机午夜电影 | 在线观看黄色网页 | 日本一级淫片色费放 | 日本成人网址 | 四虎影库在线播放 | 国产成人高清在线 | 青青免费在线视频 | 亚洲精品色午夜无码专区日韩 | 久久99久久99精品免观看软件 | 黄色1级视频 | 日本在线视频免费观看 | 欧美国产精品 | 久久久精品免费观看 | 日韩中文字幕不卡 | 97精产国品一二三产区 | 日韩精品一区在线观看 | 午夜免费播放观看在线视频 | 亚洲激情网 | 亚洲少妇一区二区 | 羞羞网站在线观看 | 日韩一区二区三区四区五区六区 | 韩国无码一区二区三区精品 | 男人天堂中文字幕 | 午夜在线观看视频 | 成人性生交大片免费 | 北条麻妃99精品青青久久 | 99热这里只有精品在线观看 | 色中文字幕 | 91黄色片| 蜜桃成人网 | 美女一区 | 亚洲一区二区三区免费视频 | 亚洲一区二区欧美 | 亚洲理论片 | 久久免费精品 | 成人午夜视频在线 | 日本网站免费观看 | 2019中文字幕在线观看 | 人人综合 | 西西44rtwww国产精品 | 毛茸茸的中国女bbw 国产午夜精品久久久 | 奇米久久 | 三浦理惠子av在线播放 | 黄色aaa视频 | 欧美综合激情网 | 在线h网站 | 中文字幕女同女同女同 | 人人爱操 | 九九热视频在线播放 | 欧美亚洲中文精品字幕 | 99久久久无码国产精品免费蜜柚 | 精久久久久久久 | 久草五月天 | 欧美性生活视频 | 欧美一卡二卡三卡 | 嘿咻免费视频 | 四虎影库在线播放 | 色天堂视频 | 伊人99热 | 国语毛片| 无码人妻aⅴ一区二区三区玉蒲团 | 三级av电影| 五月天久久久久久 | 能免费看av的网站 | 日韩城人网站 | 蜜桃视频在线观看www | 99热这里只有精品在线观看 | 韩国一区二区在线观看 | 久久精品一 | 色哟哟一区 | 小早川怜子一区二区三区 | 亚洲天堂日本 | 丁香网站 | 亚洲国产成人久久 | 欧美毛片基地 | 夜夜摸夜夜操 | 污污网站在线免费观看 | 色噜噜在线观看 | 亚洲少妇一区二区 | 高清久久久 | 国产网站免费 | 国产午夜在线视频 | 色婷婷伊人 | 特级毛片在线观看 | 伊人国产在线 | 五月开心网| 夜色资源网 | 日本特黄一级 | 波多野结衣简介 | 日本特黄一级 | 美女爆乳18禁www久久久久久 | 美女一区 | 久久不卡影院 | 在线观看亚洲国产 | 国产一区二区在线免费 | 97在线播放| 中文字幕视频在线观看 | 在线播放精品 | 午夜免费观看视频 | 久久久久久av无码免费网站 | 蜜桃视频在线观看www | 日本乳汁视频 | 亚洲精品自拍 | 人人草人人射 | 91精品人妻一区二区三区蜜桃欧美 | 久久一二三四区 | 日日夜操 | 一级做a视频 | 国产精品白丝喷水在线观看 | 黄漫在线免费观看 | 天天躁日日躁aaaaxxxx | 日本在线三级 | 五月天狠狠干 | 国产成人激情 | 国产成人高清在线 | 精久久久久 | 俄罗斯特级毛片 | 免费三级av | 无码人妻久久一区二区三区 | 久久极品视频 | 啪啪网站免费看 | 午夜在线观看影院 | 亚洲色图19p | 欧美精品 在线观看 | 亚洲精品自拍 | www.亚洲| 樱桃视频app看片 | 丰满熟妇被猛烈进入高清片 | 成人免费在线播放 | 久久精品噜噜噜成人 | 在线观看黄色片 | 亚洲综合色视频 | 五月丁香久久婷婷 | 火影忍者羞羞漫画 | 80日本xxxxxxxxx96 国产超级av | 国产精品自拍偷拍 | 黄色小说免费在线观看 | 国产色播 | av中文网 | 成人91视频 | 成年人毛片 | 一级片黄色 | 依人久久| 欧美又粗又大aaa片 亚洲欧洲视频 | 欧美精品一线 | 国产成人精品片 | 一区二区三区毛片 | 性色av蜜臀av浪潮av老女人 | 亚洲精品一二三 | 五月婷婷小说 | 强睡邻居人妻中文字幕 | 日日拍拍| 猫咪av在线 | 1024国产精品 | 4438成人网 | 久久亚洲一区二区 | 久久久99精品免费观看 | 欧美自拍视频 | 欧美国产日韩一区二区 | 色婷婷av一区二区三区之红樱桃 | 绿帽视频 | 夜夜摸夜夜操 | 日本美女一区二区 | 亚洲精品777 | 91精品人妻一区二区三区 | 成人在线视频观看 | 国产精品三 | 操操干干| 中文字幕丰满乱子伦无码专区 | 91人妻一区二区 | 一区二区三区欧美视频 | 黄漫app| 日韩五码 | 色屋在线| 性视频播放免费视频 | 欧洲成人免费视频 | 国产又粗又大又爽视频 | 超碰三级 | 国产黄色录像 | 四虎影视免费永久大全 | 丝袜 亚洲 另类 欧美 重口 | 亚洲精品色午夜无码专区日韩 | 成人丁香婷婷 | 日本精品在线播放 | 完美搭档在线观看 | 中文字幕亚洲欧美日韩高清 | 中文字幕一区二 | 青青草国产精品 | 中文字幕 自拍偷拍 | 欧美高清hd18日本 | 色戒未删节版 | 日韩理论片在线观看 | 日本激情小视频 | 狠狠操夜夜爽 | 久久免费在线视频 | 久久精品噜噜噜成人 | 日韩精品久久久久久久 | 国产麻豆精品久久一二三 | 四虎影视永久免费观看 | 日韩三级| 国产超级av| 国产精品1024 | 性一交一乱一区二区洋洋av | 4hu最新网址| 中文字幕不卡在线观看 | 夜夜骑天天操 | 成人动漫网站在线观看 | 欧美成人高清视频 | 色噜噜狠狠狠综合曰曰曰 | videosex抽搐痉挛高潮 | 天天亚洲 | 秋霞一区| 亚洲高潮av| 久久不卡影院 | 完美搭档在线观看 | 深夜成人福利视频 | ass亚洲肉体欣赏pics | 日韩一级片在线 | 久久久久久av无码免费网站 | 亚洲视频国产精品 | 日本女优网址 | 日本一区二区视频在线 | 免费黄色网址大全 | 丁香六月激情 | 成人综合色站 | 午夜激情免费视频 | 啪啪网站免费看 | 天天摸天天爽 | 91久久国产综合久久91精品网站 | 在线观看亚洲国产 | 久久影院在线观看 | 噜噜噜久久 | 青青草狠狠干 | 欧美第四页 | 香港a毛片| 国产黄色片在线播放 | 亚洲免费福利视频 | 久草青青草 | 国产精品白丝喷水在线观看 | 福利在线观看 | 欧美色激情 | 伊人久久久久久久久久 | 色婷婷av一区二区三区之红樱桃 | 欧亚一区二区 | 自拍偷拍专区 | 五月天亚洲色图 | 亚洲精品小视频 | 日本黄色xxx| 打白嫩光屁屁女网站 | 篠田优在线 | v天堂在线观看 | 国产精品久久国产精麻豆96堂 | a级黄毛片 | 天堂av在线资源 | 7777奇米影视 | 青青草国产成人99久久 | 亚洲精品一区二三区 | 成人黄色免费电影 | 97在线视频免费 | 亚洲啊v | 乳女教师の诱惑julia | 天天亚洲 | 日本中文字幕视频 | 欧美色激情 | 欧美亚洲另类小说 | 亚洲高潮av | 草莓视频免费在线观看 | 亚洲精品色午夜无码专区日韩 | 国产三级久久 | 久久亚洲电影 | aaaaa黄色片 日韩电影院 | p站在线观看 | 原神女裸体看个够无遮挡 | 欧美尻逼 | 婷婷欧美 | 欧美在线亚洲 | 国产网站免费 | 4438x在线观看| 青青草青青操 | 国产精品探花视频 | 国产日韩电影 | 青春草视频 | 日韩欧美一级 | av每日更新 | 免费色片 | 狠狠狠操 | 99热日韩 | 91精品国产aⅴ一区二区 | 国产精品久久一区二区三区 | 国产精品一级 | 91麻豆精品国产91久久久久久 | 欧美日韩h| 日韩在线视频看看 | 依人久久| 亚洲综合久久久 | 五月婷婷,六月丁香 | 国产一区二区在线免费 | 久草视频免费在线 | 97人妻精品一区二区三区免 | 国产精品偷拍 | 国产九九精品视频 | 永久91嫩草亚洲精品人人 | 1024国产精品 | 国产精品久久国产精麻豆96堂 | 看黄色一级视频 | 国产亚洲一区二区三区在线观看 | 精品国产乱码久久久久久郑州公司 | 男18无遮挡脱了内裤 | 在线看一区 | 久草高清视频 | 绿帽视频 | 五月开心网 | 国产在线高清 | 欧美20p| aa亚洲| 欧美一级少妇 | 亚洲av毛片| 男人操女人网站 | 欧美午夜精品一区二区 | 久久作爱视频 | 黄污视频在线观看 | 美女爆乳18禁www久久久久久 | 国产福利在线观看 | 日韩在线观看一区 | 免费特级毛片 | 啪啪网站免费看 | 91狠狠 | 国产亚洲色婷婷久久99精品91 | 99热这里只有精品在线观看 | 亚洲美女一区二区三区 | 亚洲精品v | 黑人爱爱视频 | 乌克兰黄色片 | 91成人免费视频 | 大陆熟妇丰满多毛xxxⅹ | 韩国一区二区三区在线观看 | 国产黄色小说 | 日本免费中文字幕 | 青青青草视频在线 | 免费成人av片 | gogo人体做爰大胆视频 | 日本欧美激情 | 中文字幕一区二区人妻电影 | 性生活免费网站 | 欧美一级生活片 | 美国av导航 | 亚洲黄色在线观看 | 阿娇全套94张未删图久久 | 暖暖日本在线视频 | 国产精品偷拍 | 娇小的粉嫩xxx极品 天天射天天射 | 亚洲青青草| 95在线视频| 色吧av色av | 怡红院最新网址 | 亚洲播放器 | 日本久久99 | 欧美9999 | 中国精品毛片 | 蜜桃视频中文字幕 | 国产精品一级 | 欧美视频久久久 | 就去吻亚洲 | 国产精品白丝喷水在线观看 | 视频网站在线观看18 | 西西44rtwww国产精品 | 午夜精品久久久久久久爽 | 在线视频 日韩 | 狠狠干超碰 | 日韩久久一区二区 | 女m被s玩胸虐乳哭着求饶 | 1024国产在线 | 欧美区一区二 | 日韩精品久 | 欧美四区| 黑人爱爱视频 | 丰满大爆乳波霸奶 | 亚洲精品中文字幕 | 97精产国品一二三产区 | 国产精品乱码 | 日本美女一区二区 | 亚洲av毛片| 一道本av | 樱桃香蕉视频 | 成人黄色免费电影 | 国产熟女高潮一区二区三区 | 亚洲天堂av在线播放 | 日本一区二区在线 | 波多野结衣人妻 | 自拍偷拍国产精品 | 污网站视频 | 亚洲综合中文字幕在线 | 国产无套精品一区二区三区 | 污片视频在线观看 | 狂野欧美 | 后宫秀女调教(高h,np) | 精品美女一区二区三区 | 免费观看av的网站 | 亚色中文 | 欧美尻逼 | 免费看欧美大片 | 国产无套精品一区二区三区 | 日日夜操 | 美女扒开尿口给男人桶 | 深夜成人福利视频 | 欧美jizz欧美性大全 | 久久九九99| 波多野结衣中文字幕在线 | 婷婷激情av | 欧美老熟妇xb水多毛多 | 日韩欧美大片在线观看 | 国产人妻精品一区二区三区不卡 | 久久久久久精 | 人妻少妇偷人精品视频 | 成人91视频 | 一级片黄色 | 日韩一区二区三区四区在线 | 中文字幕一二三 | 懂色av一区二区三区免费观看 | 狠狠网站| 人妻少妇偷人精品视频 | 国产色网站 | 沟厕沟厕近拍高清视频 | 性色av蜜臀av浪潮av老女人 | 丰满熟妇被猛烈进入高清片 | 亚洲色图自拍 | 伊人久久国产 | 成人性生交大片免费 | 免费网站观看www在线观 | www婷婷| 亚洲精品中文字幕 | 40到50岁中老年妇女毛片 | 日本网站免费观看 | 中文av在线播放 | 色婷婷国产精品 | 亚洲av毛片| 97看片吧 | 娇小的粉嫩xxx极品 天天射天天射 | 欧美成人不卡 | 精品伦精品一区二区三区视频密桃 | 潘金莲一级淫片免费放动漫 | 天天狠狠操 | 西西人体大胆4444www | 欧美放荡性医生videos | 91午夜影院| 中国男女全黄大片 | 久久av电影 | 国产一区二区在线免费 | 欧美成在线 | 视频在线你懂的 | 爆操巨乳 | 日韩国产欧美一区二区 | 色中色在线视频 | 韩国无码一区二区三区精品 | 狂野欧美 | 精品1区2区3区| 中国精品毛片 | 久久精品国产亚洲AV无码男同 | 毛茸茸的中国女bbw 国产午夜精品久久久 | 日韩经典一区二区 | 天堂国产| 日本黄色精品 | 天天草夜夜| 99精品视频在线 | 97精品在线观看 | 总裁憋尿呻吟双腿大开憋尿 | 国产网站免费 | 插插插91 | 嘛豆视频 | 日韩三级| 久久国产免费 | 国产无套精品一区二区三区 | 夜夜骑天天操 | 最新日韩在线 | 在线观看黄色片 | 五月婷婷久久久 | 日韩爱爱网 | 成年人视频免费在线观看 | 婷婷午夜激情 | 特黄aaaaaaaaa毛片免费视频 | 91久久久久国产一区二区 | av在线播放网站 | 黄色1级视频 | 国偷自产视频一区二区久 | 啪啪网站免费看 | 日韩视频一区在线观看 | 色视屏| 久久99久久99精品免观看软件 | 久久噜 | 日韩av一区二区三区在线观看 | 婷婷开心激情网 | 久久精品波多野结衣 | 日本三级视频在线观看 | 天天干视频在线观看 | 动漫美女被到爽 | 欧美日韩三级在线 | 国产又粗又猛又爽又黄的 | 久久久精品免费观看 | 久久午夜视频 | 精品资源成人 | 色欲av无码一区二区三区 | 男人的天堂一区二区 | 国产91小视频 | 国产视频一区二区在线观看 | 久久福利片| 天天天天天操 | 亚洲图片欧美 | 女女les互磨高潮国产精品 | 波多野结衣一区二区三区在线观看 | 年代下乡啪啪h文 | 天堂影视在线观看 | 久久久观看 | 国内91视频 | 国产成人av一区 | 国产一区免费 | 久久这里有 | 国产精品视频在线观看 | 亚洲九九 | 在线观看成人网 | 成人观看| 天天干天天草天天射 | 黑丝啪啪 | 欧美九九 | 丁香六月激情 | 欧美69久成人做爰视频 | 久久国产精品免费视频 | 久久99久久99精品免观看软件 | 羞羞网站在线观看 | 欧美成人黄色片 | 夜色资源网 | 俄罗斯特级毛片 | 国产1区2区在线观看 | 日韩一区二 | 国产三级在线观看视频 | 奇米影视av | 日本在线三级 | 明日叶三叶 | 欧日韩一区二区三区 | 另类日韩| 欧美高清hd18日本 | 特色黄色片 | 激情开心网站 | 在线观看成人网 | 91成人在线免费视频 | 欧美成人激情视频 | 久久大陆 | 打白嫩光屁屁女网站 | 国产性色av | 日韩性视频 | 中文字字幕在线中文乱码电影 | 男人天堂中文字幕 | 精品无码久久久久久久久 | 成人羞羞国产免费 | 无码人妻久久一区二区三区 | 在线黄色av网站 | 天天拍夜夜操 | 成人h在线观看 | 日韩精品第二页 | 成人片免费视频 | 天天干天天干天天干 | 欧美性生活视频 | 日韩精品视频在线免费观看 | 黑夜传说1 | 三浦理惠子av在线播放 | 色小说在线 | 伊人色网| 懂色av蜜臀av粉嫩av分享 | 米奇影视777 | 欧美午夜精品一区二区 | 免费成人av在线 | 青青草激情视频 | a级片久久 | 今天高清视频在线观看播放 | 午夜影视在线观看 | 成人h在线观看 | 日本欧美激情 | 欧美成人不卡 | 一区二区免费 | 泰剧19禁啪啪无遮挡 | 国产视频一区在线 | 国产精品久久久久久亚洲色 | 毛片三级 | 超碰免费公开 | 娇小的粉嫩xxx极品 天天射天天射 | 成人在线视频观看 | 色小说在线 | 99热日韩 | 丁香六月综合 | 神马影院午夜伦理 | 特大黑人巨交吊性xxxx视频 | 三级av电影 | 蜜桃成人网 | 免费成人av片 | 精品无码人妻一区二区三区品 | 永久免费视频网站直接看 | 口舌奴vk | 在线观看毛片网站 | 欧美日韩精品久久久 | 欧美自拍视频 | av蜜臀网站| 麻豆国产精品一区 | 亚洲一区国产一区 | 亚洲激情网| 亚洲h视频在线观看 | 2019毛片 | 中文字幕亚洲区 | 精品无码人妻一区二区三区品 | 精久久久久 | 成人在线一区二区三区 | 欧美一区二区三区不卡 | 欧美一级成人 | 91禁漫h动漫羞羞网站 | 北条麻妃99精品青青久久 | 国产午夜精品久久久 | 色综合中文字幕 | 清纯粉嫩极品夜夜嗨av | 激情开心网站 | 精品无码久久久久久久久 | 国产1区2区在线观看 | 久久久久久国产精品 | 激情宗合网 | 夜色资源网 | 二十四小时在线更新观看 | 欧美成在线 | av在线电影网 | 亚洲国产一区在线观看 | 午夜久久久久久久久久 | 丁香婷婷久久久综合精品国产 | 午夜在线观看影院 | 日韩一区二 | 午夜在线观看影院 | 日本一级淫片色费放 | 91天堂| 色鬼艳魔大战1春荡女淫 | 麻豆精品一区二区 | 成人精品影院 | 国产精品免费一区二区三区 | 久久精品噜噜噜成人 | 爱吃波客今天最新视频 | 久久极品视频 | 四虎影视永久免费观看 | 口舌奴vk | 99婷婷| 天天干在线观看 | 北条麻妃99精品青青久久 | 亚洲日日夜夜 | 国产精品嫩草69影院 | 成人黄网免费观看视频 | 在线观看网页视频 | 色欲av无码一区二区三区 | 免费三片在线观看网站v888 | 美女靠逼app | 黄色成人毛片 | 国产无遮挡裸体免费视频 | 精品午夜视频 | 日韩美女在线视频 | 久草视频免费在线 | 色鬼艳魔大战1春荡女淫 | 四级黄色片| 午夜免费在线 | 日本精品在线 | 中文字幕一区二 | 亚洲精品一区二三区 | 黑人性高潮 | 人人爱操 | 91桃色在线观看 | 91亚洲精品在线观看 | 色哟哟精品一区 | 麻豆视频免费版 | 国产h视频在线观看 | 综合激情久久 | 中文在线免费视频 | 亚洲色图19p | 欧美高清hd18日本 | 国产视频黄 | 911精品国产一区二区在线 | 久久大陆| 成人免费在线播放 | 日韩videos | 小早川怜子一区二区三区 | 国产精品免费久久 | 久久久91 | 一道本av | 欧美精品 在线观看 | 熟睡侵犯の奶水授乳在线 | 日韩精品免费一区二区夜夜嗨 | 日韩精品久 | 精品伦精品一区二区三区视频密桃 | 中文天堂网| 色婷婷国产精品 | 年代下乡啪啪h文 | 激情五月婷婷 | 免费麻豆视频 | 人妻精品久久久久中文 | 欧洲一区二区在线 | 免费网站观看www在线观 | 麻豆亚洲一区 | 国产乱子伦精品视频 | 开心激情播播 | 懂色av蜜臀av粉嫩av分享 | www.国产91 | 污片视频在线观看 | 农村妇女毛片 | 成人羞羞国产免费 | 国产精品天天狠天天看 | 99热免费 | 黑人极品ⅴideos精品欧美棵 | 亚洲欧美精品一区二区三区 | 碧蓝之海动漫在线观看免费高清 | 中文字幕不卡在线观看 | 天堂在线一区 | 天天干夜夜欢 | 午夜人体| 色人阁视频 | 日本亚洲色大成网站www久久 | 欧美精品久久99 | 国产精品av一区 | 狠狠狠操 | 91久久久久久 | 日本中文字幕视频 | 九九综合久久 | 琪琪五月天 | 成人动漫网站在线观看 | 中文字字幕在线中文乱码电影 | 国产一区免费视频 | 丁香婷婷久久久综合精品国产 | 最新国产露脸在线观看 | 看片网站在线观看 | 久久久888 | 2019毛片 | 综合导航 | 久草网址 | 久久久久久久久久网站 | 捆绑无遮挡打光屁股 | 日韩精品免费一区二区夜夜嗨 | 色婷婷综合久久久中文字幕 | 免费国产一区 | 成人黄页 | 国产无套精品一区二区三区 | 国产中文字幕在线播放 | 青青青草视频在线观看 | 国产精品嫩草69影院 | 日本高清二区 | 久久久青草| 99热这里只有精品在线观看 | 狠狠操夜夜爽 | 久草99| 国产九九精品视频 | 国产精品呻吟 | 大地二资源在线观看高清国语版 | www婷婷| 国产精品1024 | 亚洲国产成人精品女人久久久 | 精品无码久久久久久久久 | 51国产视频 | 熟女人妻aⅴ一区二区三区60路 | 亚洲女优在线观看 | 91精品国产91久久久久久黑人 | 91免费影片 | 中文字幕亚洲欧美日韩高清 | 日本妈妈9 | 欧美激情黑白配 | 日本三级视频在线观看 | 插入综合网 | 日韩精品无码一区二区三区久久久 | 大香焦久久| 欧美成在线 | 樱桃视频app看片 | 午夜免费在线 | 国产精品久久 | 国产视频大全 | 免费一级大片 | 视频一区在线播放 | 欧美区一区二 | 很黄很污的网站 | 女女在线 | 日韩2区| 五月婷婷久久久 | 自拍偷拍第五页 | 日韩黄色免费观看 | 四虎影视免费永久大全 | www男人天堂| 亚洲爽爽 | 国产精品免费一区二区三区 | 国产日韩欧美中文字幕 | 五月天狠狠操 | 亚洲黄色av | 精品无码人妻一区二区三区品 | www夜片内射视频日韩精品成人 | 开心激情播播 | 日韩和欧美的一区二区 | www.亚洲国产 | 视频网站在线观看18 | 涩涩五月天| 性生活免费网站 | 午夜精品久久久久久久爽 | 欧洲天堂网 | 在线观看免费黄色 | 国产精品久久国产精麻豆96堂 | 性欧美sm调教 | 男女视频免费 | 欧美精品成人在线 | 日本高清视频在线 | 欧美丝袜丝交足nylons | 午夜美女福利 | 殴美一级黄色片 | 波多野结衣一区二区三区在线观看 | 午夜精品久久久久久久爽 | 97在线视频免费 | 欧美成人激情视频 | 操到喷水| xxx在线视频 | 日本黄色xxx | 一级免费黄色片 | 欧美成人三区 | 精品日韩在线观看 | 欧美尻逼 | 久久久96人妻无码精品 | av中文网站 | 泰剧19禁啪啪无遮挡 | 日韩成人一区二区 | 四虎影视免费永久大全 | 老司机午夜电影 | 欧洲一区二区在线 | 亚洲黄色在线观看 | 玩弄人妻少妇500系列 | 99在线视频精品 | 丰满熟妇被猛烈进入高清片 | 超碰夫妻 | 免费av播放 | 色婷婷激情av| 久久黄色大片 | 99久久久无码国产精品免费蜜柚 | 俄罗斯特级毛片 | 午夜精品电影 | 性欧美sm调教 | 色七七视频 | 奇米影视av | 久久久精品免费观看 | 91禁漫h动漫羞羞网站 | 欧美在线免费观看视频 | www日日日 | 草民午夜理伦三级 | 国产精品探花一区二区在线观看 | 波多在线观看 | 欧美 日韩 精品 | 95在线视频| 在线观看国产精品入口男同 | 日韩黄色免费观看 | 91成人在线观看喷潮动漫 | 国产又爽又黄视频 | 午夜人体 | 精品无码久久久久久久久 | 青青青草视频在线 | 日韩精品免费一区二区夜夜嗨 | 欧美黑人xxxx | 91日本在线 | 日本美女一区二区 | 91老肥熟| 9999在线视频| 艳母动漫在线播放 | 亚洲第一男人天堂 | 婷婷五月综合久久中文字幕 | 黑人极品ⅴideos精品欧美棵 | 日本久久久久久久久久 | www午夜| 91热热| 国产97在线观看 | 97看片 | 欧美亚洲国产日韩 | ass亚洲肉体欣赏pics | 夜夜操夜夜爱 | 打屁股调教视频 | 久久精品波多野结衣 | 日本久色 | 色婷婷综合久久久中文字幕 | 麻豆视频免费版 | 日韩国产免费 | 自拍偷拍国产精品 | 秋霞一区 | 欧洲成人免费视频 | 欧美日韩中文字幕一区二区 | 国产中文字字幕乱码无限 | 国产精品黑丝 | 日韩在线视频看看 | 农村妇女毛片 | 特大黑人巨交吊性xxxx视频 | 午夜资源站 | 青青草成人在线观看 | 91香蕉国产| 成年人视频网 | 爱搞国产| 青娱乐超碰在线 | 精品无码久久久久久久久 | 国产成人精品无码片区在线 | 淫欲的美女理论电影完整版 | 欧美zzoo| 懂色av一区二区三区免费观看 | 久久作爱视频 | 国产69av | 污视频网站在线看 | 国产三级久久 | 亚洲一区国产一区 | 日本久久久久久久久久 | 欧美福利视频导航 | 日韩欧美一级片 | 亚洲午夜激情 | 日本久久99 | 中文字幕 自拍偷拍 | 中日韩男男gay无套 中文字幕8 | 青青青国产在线 | 国产呦小j女精品视频 | 国产呦小j女精品视频 | 97在线看| 免费在线一区二区三区 | 国产亚洲精品女人久久久久久 | www色日本 | 日日夜夜免费精品 | 7799精品视频 | 樱桃视频app看片 | 国产一区二区视频在线 | 91中文 | 性色av蜜臀av浪潮av老女人 | 国产精品乱码 | 亚洲视频在线观看一区二区 | 欧美香蕉在线 | 色婷婷激情av | 亚洲欧美日韩综合在线 | 91人妻一区二区 | 日本高清二区 | 亚洲综合小说 | 国产日韩在线视频 | 三级av电影| 一本一道久久a久久精品蜜桃 | 玩弄人妻少妇500系列 | 美女扒开双腿 | 91丨九色丨黑人外教 | xxx在线视频 | 国产在线精品视频 | 欧美日韩三级在线 | 波多野结衣av无码 | 天天干夜夜欢 | 超碰麻豆| 亚洲免费区| 欧美大片免费 | 视频在线你懂的 | 性色av蜜臀av浪潮av老女人 | 337p日本欧洲亚洲大胆张筱雨 | 色天堂视频 | 国产精品视频在线观看 | 亚洲自拍偷拍网站 | 自拍偷拍国产精品 | 色天堂视频| 五月天久久久久久 | 污污网站在线免费观看 | 久青草视频在线观看 | 手机在线免费看av | 无码人妻aⅴ一区二区三区玉蒲团 | 国模在线观看 | 中国一级黄色 | xxx免费视频 | 五月天狠狠操 | 国产精品v欧美精品v日韩 | 熟女一区二区三区四区 | 亚洲国产一区在线观看 | 复古经典毛茸茸xxxxxxxx | 狠狠狠操 | 黄视频在线播放 | 婷婷香蕉 | 在线观看免费黄色 | 黄色三级生活片 | 国产成人高清在线 | 99资源在线| 一级性爱视频 | 潘金莲一级淫片免费放动漫 | 美女xx网站 | 狠狠操天天操 | 成人羞羞国产免费 | 动漫美女被到爽 | 人人澡人人看 | 丰满少妇在线观看 | 天天躁日日躁aaaaxxxx | 在线视频 日韩 | 久久影院在线观看 | 成人做爰视频www | 亚洲av无码国产综合专区 | 色视屏| 岛国av大片| 中文字幕 自拍偷拍 | 欧美日韩中文字幕一区二区 | 99re国产 | 久久av电影| 无码人妻久久一区二区三区 | 日韩精品无码一区二区三区久久久 | 国产精品视频在线观看 | 91嫩草视频在线观看 | 国产黄色高清视频 | 欧美高清hd18日本 | 欧美丝袜丝交足nylons | 4438x在线观看 | 玩弄人妻少妇500系列 | 欧美交换国产一区内射 | 在线观看xxxx | 成人丁香婷婷 | 欧美xxxx18国产 | 篠田优在线 | 禁断介护老人中文字幕 | 日本一区二区在线 | 大学生三级中国dvd 亚洲成人精品久久 | av免费网站 | 修仙淫交(高h)h文 | 看免费毛片| 污污网站在线免费观看 | 国内精品久久久久久 | 亚洲黄色av | 91久久精品一区二区 | 成人在线一区二区三区 | 樱桃视频app看片 | 超碰在线亚洲| 国产精品视频入口 | 国产日比视频 | 口舌奴vk| 欧美自拍视频 | 久久成人一区 | 91精品国产aⅴ一区二区 | 火影忍者羞羞漫画 | 欧美影院一区 | 三上悠亚 在线观看 | 国产第8页| 91精品国产aⅴ一区二区 | 国产乱码精品一区二区三区中文 | 成人污视频在线观看 | www.久久| 欧美综合一区 | 国产精品自拍偷拍 | 女人做爰全过程免费观看美女 | 国产a国产| 高清久久久 | 神马影院午夜伦理 | 亚色中文| 欧美成人精品激情在线视频 | 国产精品2 | 国产日批视频 | 灌篮高手全国大赛电影 | 成年女人免费视频 | 欧美丰满熟妇bbbbbb | 午夜国产片 | www.五月激情| 国产亚洲激情 | 午夜不卡av免费 | 亚洲黄视频 | 亚洲国产一区在线观看 | 四虎网址在线观看 | 午夜激情视频在线观看 | 日皮视频免费观看 | 超碰人人超碰 | 欧美婷婷 | 日日夜夜精| 午夜院线 | 九九视频在线播放 | 天天插天天狠 | 中文字幕视频在线观看 | 亚洲xxx视频 | 殴美一级黄色片 | 91黄色免费视频 | 肉丝av| 黄色片网站在线观看 | 91免费影片 | 狠狠操在线观看 | 天堂影视在线观看 | 久久久在线 | 欧美日韩三级在线 | 91超碰免费在线 | 亚洲xxx视频 | 99热免费 | 欧洲成人免费视频 | 亚洲国产成人精品女人久久久 | 亚洲欧洲视频 | 99激情| 天天插天天射 | 国产精品自拍一区 | 亚洲综合久久久 | 国产精品久久久久久吹潮 | 国产无遮挡裸体免费视频 | www.国产91| 国产精品久久国产精麻豆96堂 | 四虎在线免费观看 | 欧美老熟妇xb水多毛多 | 欧美日韩三级在线 | 在线观看毛片网站 | 亚洲免费观看高清 | 草莓视频免费在线观看 | 性史性dvd影片农村毛片 | 日本高清二区 | 大地二资源在线观看高清国语版 | 欧美 日韩 精品 | 国产午夜精品理论片 | 成人观看 | 女女百合国产免费网站 | 男女网站免费 | 日本久色| 97看片 | 欧美精品成人在线 | 成人动漫网站在线观看 | 日韩免费高清 | 禁断介护老人中文字幕 | 爱操视频 | 国产白丝在线观看 | 欧美va视频 | 蕾丝视频污 | 黄免费看 | 日本在线视频免费观看 | 欧美日韩国产高清 | 日批网址| 97在线视频免费 | 超碰免费公开 | 成人91视频 | 四虎影视库 | 国产三级久久 | 久久超| 女女在线| 不卡久久| 中文在线www| 永久免费视频网站直接看 | 中文av网 | 美女一区二区三区四区 | 国产精品1024| 91精品视频在线播放 | 日韩高清一区 | 熟女人妻aⅴ一区二区三区60路 | 狠狠干.com | 国产一区二区中文字幕 | 人妻一区二区在线 | 91免费视频| 精品人妻午夜一区二区三区四区 | 农村老妇性真猛 | 在线播放国产一区 | 国产一区二区在线免费 | 国产福利在线观看 | www夜片内射视频日韩精品成人 | 久久影视精品 | 清纯粉嫩极品夜夜嗨av | 亚洲精品一二三 | 欧美一区二区三区成人精品 | 四虎成人精品永久免费av九九 | 精品人妻午夜一区二区三区四区 | 一级免费观看 | 国产xxxx孕妇 | 久久亚洲一区二区 | 99视频免费看 | 青青青青操| 欧美性生活视频 | 亚洲综合中文字幕在线 | 精品无码久久久久久久久 | 日本中文字幕视频 | 午夜国产精品视频 | 91人妻一区二区 | 国产成人高清在线 | 野花视频免费在线观看 | 日本成人一级片 | 日本黄色大片免费 | 国产视频资源 | 欧美一区免费观看 | 成人亚洲 | 香蕉福利 | 午夜免费激情视频 | 国产美女视频免费观看下载软件 | 国产精品999 | 强睡邻居人妻中文字幕 | 成人啪啪漫画羞羞漫画 | 日韩高清一区 | 殴美一级黄色片 | 成年人免费视频观看 | 国产又大又黄的视频 | av正在播放 | 九九视频在线免费观看 | 色人阁视频 | 精品人妻无码中文字幕18禁 | 丁香网站 | a在线观看 | 国产三级久久 | 国产在线看片 | 国产伦精品一区 | 成人黄网免费观看视频 | 玖玖国产 | 欧美日韩精品久久久 | 黄色h视频 | 久久看看 | av每日更新 | 亚洲成成品网站 | 毛茸茸的中国女bbw 国产午夜精品久久久 | 中文字字幕在线中文乱码电影 | 日韩人妻无码一区二区三区99 | 淫欲的美女理论电影完整版 | 日韩在线观看一区 | 秘密的基地| 在线高清观看免费观看 | 黄漫在线免费观看 | 欧美第二页| 日本美女交配 | 91在线播放视频 | 一区二区三区日韩欧美 | 国产精品久久国产精麻豆96堂 | 欧美香蕉在线 | 日韩精品在线视频 | 久久免费精品 | www.日本高清 | 特级av片 | 午夜视频在线免费 | 女同vk| 污污内射久久一区二区欧美日韩 | 国产精品探花一区二区在线观看 | 熟妇高潮一区二区三区 | 97在线视频免费 | 淫视频在线观看 | 日本女v片 | 国产一级二级 | 成人羞羞国产免费 | 欧日韩一区二区三区 | 久久综合亚洲 | 女同黄色小说 | 久久精品爱 | 超碰麻豆| 日韩国产欧美一区二区 | 成人免费在线播放 | 91抖音在线观看 | a级片久久 | 日韩精品一区二区三区免费视频 | 青青91| 91桃色在线观看 | 久草久热 | 国产精品久久网站 | 柠檬福利第一导航在线 | 可以看的毛片 | 久久国产精品久久久 | 潘金莲一级淫片免费放动漫 | 97在线看| 美国av导航 | 久色网站 | 色哟哟精品 | 久久亚洲电影 | 色戒未删节版 | 欧美一级网| 中文字幕女同女同女同 | 久草五月天 | 国产青青草视频 | 国产一区二区在线看 | 亚洲国产一区在线观看 | 日本一区二区在线 | 超碰在线亚洲| 欧美影院一区 | 欧美国产精品 | 在线黄色av网站 | 在线观看www. | www日本高清视频 | 蜜桃视频中文字幕 | 成人片免费视频 | 中文字幕8| www午夜 | 中文字幕一区二区三区精华液 | 欧洲精品一区二区三区 | 欧美毛片基地 | 原神女裸体看个够无遮挡 | 巨粗高h双龙筋肉体育生 | 欧美一区二区三区成人精品 | 欧美性猛交xxxx乱大交退制版 | 后宫秀女调教(高h,np) | 西西44rtwww国产精品 | 欧美亚洲国产一区二区三区 | 日韩高清不卡 | 欧美a∨ | 性色av蜜臀av浪潮av老女人 | 7777奇米影视| 欧美毛片基地 | 成人av图片 | 亚洲天堂一区二区三区 | 亚洲欧洲视频 | 亚洲精品97久久 | 国产成人在线免费观看视频 | 中国极品少妇xxxx做受 | 天天拍夜夜操 | 三级黄色免费 | 中文字字幕在线中文乱码电影 | 美女视频在线播放 | 国产成人精品无码片区在线 | 成人激情片 | 日皮视频免费观看 | 日韩精品第二页 | 欧美亚洲国产日韩 | 超碰三级 | 一区二区免费在线观看 | 91色国产| 第一福利丝瓜av导航 | www日本高清视频 | 国产精品白丝喷水在线观看 | 殴美一级黄色片 | 无码人妻久久一区二区三区 | 波多野结衣中文字幕在线 | 91久久久久国产一区二区 | 黄色网入口 | 日韩精品久久久久久久 | 亚洲视频大全 | 激情五月婷婷 | 亚洲一区国产一区 | 91手机在线| av免费一区 | 91国产高清 | 爱情岛亚洲论坛入口福利 | 精品无码久久久久久久久 | 久久精品波多野结衣 | 中文字幕一区二区三区人妻不卡 | 国产精成人 | 好吊一区二区三区 | 久久久久久中文字幕 | 欧美专区第一页 | 中文字幕一区二区三区精华液 | 午夜久久福利 | 激情视频一区 | 久操福利视频 | 2019中文字幕在线观看 | 欧美在线专区 | 性一交一乱一区二区洋洋av | 四虎影视库 | 风流少妇一区二区三区91 | av影片在线播放 | 免费a视频在线观看 | 殴美一级黄色片 | 性色av蜜臀av浪潮av老女人 | 欧美国产日韩一区二区 | 亚洲精品白浆高清久久久久久 | 久久成人免费视频 | 97在线看| 奇米影视77777 | 91久久精品日日躁夜夜躁欧美 | 黄色国产视频 | 一级黄色大片 | 欧美婷婷| 我我色综合| 五月天狠狠干 | www.色多多 | 国产中文字字幕乱码无限 | 日日拍拍 | 国产精品久久久久av | 国产h视频在线观看 | 在线欧美 | 国产黄色高清视频 | 国产精品999| 日本中文字幕视频 | www.色多多| 欧美一区二区视频在线 | 国产精品久久网站 | 草莓视频app18在线视频 | 久久久久久一区二区三区 | 成人av专区 | 中文字幕一区二区三区人妻不卡 | 明日叶三叶 | 91精品国产综合久久香蕉922 | 91久久久久久久久久久 | 亚洲欧美精品一区二区三区 | 永久免费在线 | 麻豆视频在线观看 | 免费在线一区二区三区 | 午夜精品一区二区三区在线视频 | 在线精品观看 | 久久久久9999 | 天堂在线1| 久久国产精品免费视频 | 国产亚洲色婷婷久久99精品91 | 51 吃瓜网| 污污内射久久一区二区欧美日韩 | 久久久久久一区二区三区 | 免费网站观看www在线观 | 熟女人妻aⅴ一区二区三区60路 | 精品九九九九 | 成年人视频免费在线观看 | 久久亚洲精品小早川怜子 | 色蝌蚪 | 久久99久久99精品免观看软件 | 嫩草在线 | 久草99 | 激情综合激情五月 | 青青草狠狠干 | 国产69av | 超碰97人人爱 | 97人人爱 | 日本五十肥熟交尾 | 丰满大爆乳波霸奶 | 大地二资源在线观看高清国语版 | 综合导航| 黑夜传说1 | 91快射| 暖暖日本在线视频 | 日韩精品第二页 | 久草99 | 久久久96人妻无码精品 | 91天堂| 久热在线| 国产免费不卡 | 色婷婷伊人 | 亚洲国产精品免费 | 日韩国产欧美一区二区 | 激情宗合网 | 日韩一页 | 中文字幕av久久爽一区 | 国产亚洲色婷婷久久99精品91 | 自拍第一页 | 蜜桃av噜噜一区二区三区麻豆 | 中日韩男男gay无套 中文字幕8 | 国产福利影院 | 日本伊人久久 | av免费一区 | 日批国产 | 亚洲精品97久久 | 日韩免费网站 | 中文字幕女同女同女同 | yy6080午夜 | 麻豆亚洲一区 | 欧美zzoo| 好大好舒服视频 | 国产亚洲色婷婷久久99精品91 | 亚洲最新网址 | 青青草成人在线观看 | 日一日射一射 | 婷婷午夜激情 | 草民午夜理伦三级 | 久久影视精品 | 韩国无码一区二区三区精品 | 午夜视频在线播放 | 欧美第四页 | 91久久电影| 中文字幕最新 | 亚洲精品乱码久久久久 | 精品国内自产拍在线观看视频 | 成年人一级片 | 韩国无码一区二区三区精品 | av视屏| 在线观看毛片网站 | www.一区二区 | 殴美一级黄色片 | 在线不卡| 国产免费久久 | 久久久久久精 | 亚洲涩综合 | 少妇久久久久 | 国偷自产视频一区二区久 | 国产卡一卡二 | 北京富婆泄欲对白 | 一区二区三区日韩欧美 | 国产成人精品片 | 亚洲视频在线观看一区二区 | 日韩一区二区三区四区五区六区 | 在线看污视频 | 日日夜夜爽爽 | 少妇视频在线观看 | 午夜视频在线播放 | 强行糟蹋人妻hd中文 | 99婷婷| 97自拍偷拍 | 美女又爽又黄网站泳装 | 日本亚洲色大成网站www久久 | 99婷婷| 久久久久性 | 少妇一级片| 亚洲图色av | 国产精品第三页 | 久久男人天堂 | 爱情岛亚洲论坛入口福利 | 91精品国产91久久久久久黑人 | 色婷婷社区 | 国产一区二区毛片 | 高潮呻吟videoshd | 色婷婷国产精品 | 视频网站在线观看18 | 亚洲免费观看高清 | 国内视频精品 | 污污视频免费观看 | 国产又粗又猛又爽又黄的 | 男人插入女人阴道视频 | 日本一级一片免费视频 | 免费麻豆视频 | 青青青草视频在线 | 复古经典毛茸茸xxxxxxxx | 黄色av中文字幕 | 日韩精品一区二区三区免费视频 | 亚洲青青草 | 狠狠操在线观看 | 一区二区在线免费观看视频 | 亚洲九九 | 欧美日韩影院 | 国产a电影| 精品日韩在线观看 | 后宫秀女调教(高h,np) | 国产高清免费在线播放 | 国产麻豆精品久久一二三 | 91嫩草视频在线观看 | 97在线公开视频 | 琪琪五月天 | 日日夜夜免费精品 | 亚洲天堂av在线播放 | 95在线视频| 先锋成人资源 | 99爱在线视频 | 国产中文字幕在线播放 | 中文字幕丰满乱子伦无码专区 | 亚洲一区二区欧美 | www夜片内射视频日韩精品成人 | 天天摸夜夜添狠狠添婷婷 | 午夜精品一区二区三区在线视频 | v天堂在线观看 | 免费一级片视频 | 91精品人妻一区二区三区 | 一道本av| 人人综合| 少妇高潮惨叫久久久久久 | videosex抽搐痉挛高潮 | 欧美一级色片 | 高h喷水荡肉少妇爽多p视频 | 奇米影视av| 综合激情久久 | 色综合中文字幕 | 福利免费视频 | 久久精选 | 人妻一区二区在线 | 夜夜操夜夜爱 | 午夜免费激情视频 | 一级黄色大片 | 国产成人在线观看免费网站 | 精品资源成人 | 99re国产 | 五月天婷婷综合网 | 美国毛片网站 | 欧美亚洲中文精品字幕 | 懂色av一区二区三区免费观看 | 日韩黄色在线 | 玩弄人妻少妇500系列 | 污污网站在线免费观看 | 极度诱惑香港电影完整 | 午夜免费激情视频 | 午夜国产精品视频 | 青青操原 | 秘密基地动漫在线观看免费 | 美女吞精视频 | 精品无码久久久久 | 欧美亚洲在线视频 | 99综合| 午夜精品久久久久久久爽 | 欧美国产日韩一区二区 | 在线观看黄色网页 | 欧美大片高清免费观看 | 日本在线视频中文字幕 | 99综合 | 欧美激情自拍偷拍 | 97在线公开视频 | 中日一级片 | 日本少妇xxxx软件 | 黄污网| 男18无遮挡脱了内裤 | 三级av电影| 午夜激情免费视频 | www.黄色在线观看 | 久久久久性 | 亚洲成年人 | 中文字幕第一页在线 | 艳母日本动漫在线观看 | 欧美性猛交xxxx黑人猛交 | 91精品国产成人观看 | 国产精品白虎 | 午夜看毛片 | 亚洲日日夜夜 | 淫欲的美女理论电影完整版 | av免费一区 | 亚洲爽爽网 | 青娱乐导航 | 2019中文字幕在线观看 | 久久久国产一区二区三区 | 色欲av无码一区二区三区 | 中文字幕亚洲欧美日韩高清 | 国产精品久久久久久吹潮 | 国产chinesehd精品露脸 | 午夜免费播放观看在线视频 | 色婷婷在线影院 | 久久免费在线视频 | 三上悠亚 在线观看 | 超污视频网站 | 免费看毛片的网站 | 女同黄色小说 | 久久色婷婷 | 五月丁香久久婷婷 | 男人插入女人阴道视频 | 特黄aaaaaaaaa毛片免费视频 | 蜜桃视频在线观看www | 成人动漫网站在线观看 | 成人黄色录像 | 一本不卡| 91精品人妻一区二区三区 | 双性人hdsexvideos | 国产精品sm | 久久精品成人 | 特级毛片在线观看 | 最新国产露脸在线观看 | 亚洲免费三级 | 天天视频入口 | 依人久久 | 成人免费在线播放 | 欧美大片免费 | 色视频网 | 天堂影视在线观看 | 中文字幕8| 夜夜操夜夜爱 | 五月天婷婷综合网 | 天天干天天干天天干 | 黑人性高潮 | 9999热| av综合在线观看 | 欧美性猛交xxxx乱大交俱乐部 | 亚洲色图自拍 | www.色多多 | 成人黄色录像 | 火影忍者羞羞漫画 | 超碰97人人草 | 成人影片在线播放 | 91成人免费视频 | 欧洲精品一区二区三区 | 日韩理论片在线观看 | 欧美成人三区 | 天天干天天干天天干 | 91丝袜在线| 亚洲精品在线观看视频 | 污视频网站免费看 | 日韩精品一区二区三区免费视频 | 久久av在线 | 麻豆av在线播放 | 99热免费| 在线不卡一区 | 午夜看片| 日韩一区二区三区四区五区六区 | 91色国产| 6699嫩草久久久精品影院 | 成人片免费视频 | 免费麻豆视频 | 蜜桃视频在线观看www | 亚洲一区二区观看 | 日日干日日插 | 天天天干 | 9.1人网站| 日本在线视频中文字幕 | 日韩黄色在线 | 日韩性视频 | 女女les互磨高潮国产精品 | 日本亚洲在线 | 成人国产网站 | v天堂在线观看 | 国产日b视频 | 国产日韩在线视频 | 日本中文字幕免费 | 精品午夜福利视频 | 免费a视频在线观看 | 午夜精品一区二区三区在线视频 | 中文字幕在线免费看 | 日本亚洲色大成网站www久久 | a级黄毛片| 人妻少妇偷人精品视频 | 69精品国产 | 国产精品嫩草69影院 | 神马久久久久久久久 | 国产精品久久久久av | 国语对白永久免费 | 欧美在线免费观看视频 | 人妻丰满熟妇av无码区hd | 日一日射一射 | 国产高清av在线 | 免费看黄色a级片 | 三上悠亚 在线观看 | 久久久在线 | 日韩在线免费av | 欧美亚洲中文精品字幕 | 亚洲综合久久久 | 色久视频| 9999在线视频| 青青草成人在线观看 | 亚洲一级影院 | 999视频| 篠田优在线| 456亚洲影院 | 五月天亚洲色图 | 久久久久极品 | 亚洲三级图片 | 丰满少妇在线观看 | 国产精品嫩草69影院 | 中文字幕第一页在线 | 久色网站 | 男女床上拍拍拍 | 视频在线观看免费大片 | 国产精品一区三区 | 日韩免费网站 | 草莓视频app18在线视频 | 午夜寂寞院 | 五月天亚洲色图 | 欧美自拍视频 | 五月婷婷,六月丁香 | 天堂网av在线 | 欧美性猛交xxxx乱大交退制版 | 黄色1级视频| 日韩av无码一区二区三区 | 国产呦系列 | 五月天久久久久久 | 第一福利丝瓜av导航 | 日韩一级片在线 | 免费a视频在线观看 | 日韩av无码一区二区三区 | 爱操视频| 又黄又爽的免费视频 | 中文字幕观看视频 | 丁香网站| 日韩成人一区二区 | 丁香花电影免费播放电影 | 日韩城人网站 | 欧美色图在线播放 | 久久精品国产亚洲AV无码男同 | 午夜激情网站 | 天堂影视在线观看 | 美女爆乳18禁www久久久久久 | a级小视频 | 91天天 | 亚洲网站在线 | 欧美成人黄色片 | 午夜色图| 五月婷婷开心中文字幕 | 熟妇高潮一区二区三区 | 国产无遮挡裸体免费视频 | 国内外成人在线视频 | 黄污网| 成人精品三级av在线看 | 欧美尻逼 | 国产在线精品一区二区 | 熟妇熟女乱妇乱女网站 | 高h言情| 337p亚洲精品色噜噜狠狠 | 亚洲天堂av网站 | 97自拍偷拍 | 精品国内自产拍在线观看视频 | 国产一区二区av | 西西44rtwww国产精品 | 欧美尻逼 | 年代下乡啪啪h文 | 永久91嫩草亚洲精品人人 | 国产黄色一级大片 | 午夜精品一区二区三区在线视频 | 一本一道久久a久久精品蜜桃 | 伊人网免费视频 | 激情视频一区 | 操操干干| 青青草成人av | 乱日视频| 久草网址 | 日韩经典一区二区 | 嫩草在线 | 国产精品2 | 精品国产乱码久久久久久郑州公司 | 久久看看 | 欧美成人高清视频 | 97人妻精品一区二区三区免 | 成人污视频在线观看 | 国产三级不卡 | 欧美日韩亚洲二区 | 40到50岁中老年妇女毛片 | 亚洲免费福利视频 | 后宫秀女调教(高h,np) | 熟女人妻aⅴ一区二区三区60路 | 中文在线www | 999国产精品视频 | 美女爆乳18禁www久久久久久 | 四虎影视库 | 中文字幕不卡在线观看 | 一区二区三区黄 | 久久久99精品免费观看 | 4438成人网 | 亚洲高潮av| 美女久久久 | 丁香婷婷久久久综合精品国产 | 特大黑人巨交吊性xxxx视频 | 免费av影视 | 国产精品探花一区二区在线观看 | 亚洲精品色午夜无码专区日韩 | 国产精品久久影视 | 免费av网站观看 | 可以免费看的av网站 | 欧美私人影院 | 日韩影音 | 巨粗高h双龙筋肉体育生 | 98在线视频 | 久久国产精品免费视频 | 性欧美sm调教 | 中文字幕亚洲区 | 爱逼综合 | 精品久久网 | 第一福利丝瓜av导航 | 美女娇喘 | 久久久久噜噜噜亚洲熟女综合 | 原神女裸体看个够无遮挡 | 国语对白永久免费 | av免费一区 | 污污网站在线免费观看 | 久久av一区 | 福利电影网 | 欧美在线免费观看视频 | 四虎精品一区二区三区 | 五月婷婷激情四射 | 亚洲综合中文字幕在线 | 成人h在线观看 | 亚洲一级影院 | 无码人妻精品一区二区三区蜜桃91 | 在线观看国产精品入口男同 | 日韩videos | 91成人免费看 | 青青草国产精品 | 2019中文字幕在线观看 | 插插插91| 亚洲精品在线观看视频 | 午夜久久福利 | 国产青青青 | 中文字幕亚洲区 | 张柏芝亚洲一区二区三区 | gogogo日本免费观看电视 | 都市激情 亚洲 | 国产精品探花一区二区在线观看 | 日韩免费 | 肉丝av| 国内自拍av| 国产一区二区中文字幕 | 伊人久久国产 | 暖暖日本在线视频 | 国产97在线观看 | 成年人视频免费在线观看 | 风流少妇一区二区三区91 | 中文字字幕在线中文乱码电影 | 国产又粗又大又爽视频 | 波多野结衣一区二区三区在线观看 | 激情视频91 | 久久亚洲一区二区 | 乳女教师の诱惑julia | 奇米色777| 欧美又粗又深又猛又爽啪啪九色 | 亚洲男同视频 | 午夜精品久久久久久久爽 | 69久久久久 | 午夜视频在线免费 | 青青青国产在线 | 亚洲色图另类 | 一级大片视频 | 欧美丰满熟妇bbbbbb | 欧美日韩亚洲二区 | 97精品| www日日日| 久久久在线 | 少妇自拍视频 | 想要视频在线观看 | 日本精品一区二区三区视频 | 中文字幕一区二区三区精华液 | 在线观看黄色网页 | 黑人性高潮 | 国产精品999| 精品无码久久久久 | 国产精品久久网站 | 国产精品电影网站 | 91精品视频在线播放 | 91欧美精品 | 欧美在线免费观看视频 | 亚洲欧美精品一区二区三区 | 午夜色福利 | 在线播放国产一区 | 婷婷av一区二区三区 | 久久综合99| 国产精品嫩草69影院 | 永久免费在线 | 玉女心经在线看 | 欧美成人三区 | 91丝袜在线 | 99er这里只有精品 |