摘要:一般地,使用事件探測(cè)請(qǐng)求的完成。但一個(gè)完成的請(qǐng)求不一定是成功的請(qǐng)求,例如,事件的處理程序應(yīng)該檢查對(duì)象的狀態(tài)碼來(lái)確定收到的是而不是的響應(yīng)獲取信息創(chuàng)建對(duì)象進(jìn)度事件發(fā)送請(qǐng)求事件會(huì)在瀏覽器接收新數(shù)據(jù)期間周期性地觸發(fā)。
一般地,使用readystatechange事件探測(cè)HTTP請(qǐng)求的完成。XHR2規(guī)范草案定義了進(jìn)度事件Progress Events規(guī)范,XMLHttpRequest對(duì)象在請(qǐng)求的不同階段觸發(fā)不同類型的事件,所以它不再需要檢査readyState屬性。這個(gè)草案定義了與客戶端服務(wù)器通信有關(guān)的事件。這些事件最早其實(shí)只針對(duì)XHR操作,但目前也被其他API(如File API)借鑒。本文將詳細(xì)介紹進(jìn)度事件
基礎(chǔ)
有以下6個(gè)進(jìn)度事件
loadstart:在接收到響應(yīng)數(shù)據(jù)的第一個(gè)字節(jié)時(shí)觸發(fā)
progress:在接收響應(yīng)期間持續(xù)不斷地觸
error:在請(qǐng)求發(fā)生錯(cuò)誤時(shí)觸發(fā)
abort:在因?yàn)檎{(diào)用abort()方法而終止連接時(shí)觸發(fā)
load:在接收到完整的響應(yīng)數(shù)據(jù)時(shí)觸發(fā)
loadend:在通信完成或者觸發(fā)error、abort或load事件后觸發(fā)
timeout:超時(shí)發(fā)生時(shí)觸發(fā)
[注意]IE9-瀏覽器不支持以上事件(IE9瀏覽器僅支持load事件)
每個(gè)請(qǐng)求都從觸發(fā)loadstart事件開(kāi)始,接下來(lái),通常每隔50毫秒左右觸發(fā)一次progress事件,然后觸發(fā)load、error、abort或timeout事件中的一個(gè),最后以觸發(fā)loadend事件結(jié)束
對(duì)于任何具體請(qǐng)求,瀏覽器將只會(huì)觸發(fā)load、abort、timeout和error事件中的一個(gè)。XHR2規(guī)范草案指出一旦這些事件中的一個(gè)發(fā)生后,瀏覽器應(yīng)該觸發(fā)loadend事件
load
響應(yīng)接收完畢后將觸發(fā)load事件,因此也就沒(méi)有必要去檢查readyState屬性了。但一個(gè)完成的請(qǐng)求不一定是成功的請(qǐng)求,例如,load事件的處理程序應(yīng)該檢查XMLHttpRequest對(duì)象的status狀態(tài)碼來(lái)確定收到的是“200 OK”而不是“404 Not Found”的HTTP響應(yīng)
能僅僅像使用常見(jiàn)的progress事件處理程序一樣使用upload事件處理程序。對(duì)于XMLHttpRequest對(duì)象,設(shè)置XHR.onprogress以監(jiān)控響應(yīng)的下載進(jìn)度,并且設(shè)置XHR.upload.onprogress以監(jiān)控請(qǐng)求的上傳進(jìn)度
$file = "photo/test.jpg"; binary_to_file($file); echo "文件上傳成功!";
}else{
echo "文件格式不正確,請(qǐng)選擇圖片文件";
}
function binary_to_file($file){
$content = $GLOBALS["HTTP_RAW_POST_DATA"]; // 需要php.ini設(shè)置 if(empty($content)){ $content = file_get_contents("php://input"); //不需要php.ini設(shè)置,內(nèi)存壓力小 } $ret = file_put_contents($file, $content, true); return $ret;
};
?>
其他事件
HTTP請(qǐng)求無(wú)法完成有3種情況,對(duì)應(yīng)3種事件。如果請(qǐng)求超時(shí),會(huì)觸發(fā)timeout事件。如果請(qǐng)求中止,會(huì)觸發(fā)abort事件。最后,像太多重定向這樣的網(wǎng)絡(luò)錯(cuò)誤會(huì)阻止請(qǐng)求完成,但這些情況發(fā)生時(shí)會(huì)觸發(fā)error事件
可以通過(guò)調(diào)用XMLHttpRequest對(duì)象的abort()方法來(lái)取消正在進(jìn)行的HTTP請(qǐng)求。調(diào)用abort()方法在這個(gè)對(duì)象上觸發(fā)abort事件
調(diào)用abort()的主要原因是完成取消或超時(shí)請(qǐng)求消耗的時(shí)間太長(zhǎng)或當(dāng)響應(yīng)變得無(wú)關(guān)時(shí)。假如使用XMLHttpRequest為文本輸入域請(qǐng)求自動(dòng)完成推薦。如果用戶在服務(wù)器的建議達(dá)到之前輸入了新字符,這時(shí)等待請(qǐng)求不再有用,應(yīng)該中止
XHR對(duì)象的timeout屬性等于一個(gè)整數(shù),表示多少毫秒后,如果請(qǐng)求仍然沒(méi)有得到結(jié)果,就會(huì)自動(dòng)終止。該屬性默認(rèn)等于0,表示沒(méi)有時(shí)間限制
如果請(qǐng)求超時(shí),將觸發(fā)ontimeout事件
var xhr = new XMLHttpRequest();
btn.onclick = function(){
xhr.abort();
};
xhr.ontimeout = function(){
console.log("The request timed out.");
}
xhr.timeout = 100;
xhr.onabort = function(){
console.log("The transfer has been canceled by the user.");
}
xhr.onerror = function(){
console.log("An error occurred while transferring the file.");
}
xhr.onloadend = function(){
console.log("請(qǐng)求結(jié)束");
}
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/103033.html
摘要:同源策略指的是當(dāng)前頁(yè)面和目標(biāo)協(xié)議域名和端口均相同。發(fā)出請(qǐng)求的頁(yè)面所在域。響應(yīng)的頭部信息在后端處理,不在此處講解。該事件會(huì)在數(shù)據(jù)接收期間不斷觸發(fā),但間隔不確定。服務(wù)器確認(rèn)允許之后,才發(fā)起實(shí)際的請(qǐng)求。 ajax作為前端開(kāi)發(fā)必需的基礎(chǔ)能力之一,你可能會(huì)使用它,但并不一定懂得其原理,以及更深入的服務(wù)器通信相關(guān)的知識(shí)。在最近兩天的整理過(guò)程中,看了大量的文章,發(fā)現(xiàn)自己的后端能力已經(jīng)限制自己在網(wǎng)絡(luò)通...
摘要:在接收響應(yīng)期間持續(xù)不斷地觸發(fā)。在請(qǐng)求發(fā)生錯(cuò)誤時(shí)觸發(fā)。在通信完成或者觸發(fā)或事件后觸發(fā)。已經(jīng)接收到部分響應(yīng)數(shù)據(jù)?;跇?biāo)準(zhǔn)被廣泛支持。破壞程序的異常處理機(jī)制。 原文(我的GitHub):https://github.com/liangfengbo/frontend-ability/issues/1 學(xué)習(xí)大綱 理解Ajax的工作原理 Ajax核心-XMLHttpRequest對(duì)象 封裝Aja...
摘要:隨著對(duì)象被廣泛的接收,也開(kāi)始著手制定相應(yīng)的標(biāo)準(zhǔn)來(lái)規(guī)范其行為。四設(shè)置請(qǐng)求頭每個(gè)請(qǐng)求和響應(yīng)都會(huì)帶有相應(yīng)的頭部信息,包含一些與數(shù)據(jù),收發(fā)者網(wǎng)絡(luò)環(huán)境與狀態(tài)等相關(guān)信息。該方法會(huì)令對(duì)象實(shí)例停止觸發(fā)事件,并且不再允許訪問(wèn)任何和響應(yīng)有關(guān)的對(duì)象屬性。 在上一篇文章中我們知道,AJAX是一系列技術(shù)的統(tǒng)稱。在本篇中我們將更進(jìn)一步,詳細(xì)解釋如何使用Ajax技術(shù)在項(xiàng)目中獲取數(shù)據(jù)。而為了解釋清楚,我們首先要搞清楚...
摘要:一款精簡(jiǎn)而豐富的微型框架,非常適合以為核心的項(xiàng)目使用。并集成指令模板進(jìn)度條效果等功能。雖然支持載入頁(yè)面的運(yùn)行,但是由于安全限制以及可能出現(xiàn)的重復(fù)運(yùn)行的問(wèn)題,建議將所有寫在主頁(yè)面,事件以委托方式綁定。使用模式請(qǐng)求頁(yè)面,這樣可以保證是完全重載。 jQloader v0.2.3 一款精簡(jiǎn)而豐富的微型框架,非常適合以 jQuery 為核心的項(xiàng)目使用。 它的核心功能為 ajax + pushS...
閱讀 3496·2023-04-25 22:44
閱讀 1045·2021-11-15 11:37
閱讀 1704·2019-08-30 15:55
閱讀 2709·2019-08-30 15:54
閱讀 1162·2019-08-30 13:45
閱讀 1489·2019-08-29 17:14
閱讀 1937·2019-08-29 13:50
閱讀 3511·2019-08-26 11:39