成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

深入理解ajax——進度事件

spacewander / 420人閱讀

摘要:一般地,使用事件探測請求的完成。但一個完成的請求不一定是成功的請求,例如,事件的處理程序應該檢查對象的狀態(tài)碼來確定收到的是而不是的響應獲取信息創(chuàng)建對象進度事件發(fā)送請求事件會在瀏覽器接收新數(shù)據(jù)期間周期性地觸發(fā)。

 一般地,使用readystatechange事件探測HTTP請求的完成。XHR2規(guī)范草案定義了進度事件Progress Events規(guī)范,XMLHttpRequest對象在請求的不同階段觸發(fā)不同類型的事件,所以它不再需要檢査readyState屬性。這個草案定義了與客戶端服務器通信有關(guān)的事件。這些事件最早其實只針對XHR操作,但目前也被其他API(如File API)借鑒。本文將詳細介紹進度事件

基礎(chǔ)
  有以下6個進度事件

  loadstart:在接收到響應數(shù)據(jù)的第一個字節(jié)時觸發(fā)

  progress:在接收響應期間持續(xù)不斷地觸

  error:在請求發(fā)生錯誤時觸發(fā)

  abort:在因為調(diào)用abort()方法而終止連接時觸發(fā)

  load:在接收到完整的響應數(shù)據(jù)時觸發(fā)

  loadend:在通信完成或者觸發(fā)error、abort或load事件后觸發(fā)

  timeout:超時發(fā)生時觸發(fā)

  [注意]IE9-瀏覽器不支持以上事件(IE9瀏覽器僅支持load事件)

  每個請求都從觸發(fā)loadstart事件開始,接下來,通常每隔50毫秒左右觸發(fā)一次progress事件,然后觸發(fā)load、error、abort或timeout事件中的一個,最后以觸發(fā)loadend事件結(jié)束

  對于任何具體請求,瀏覽器將只會觸發(fā)load、abort、timeout和error事件中的一個。XHR2規(guī)范草案指出一旦這些事件中的一個發(fā)生后,瀏覽器應該觸發(fā)loadend事件

load
  響應接收完畢后將觸發(fā)load事件,因此也就沒有必要去檢查readyState屬性了。但一個完成的請求不一定是成功的請求,例如,load事件的處理程序應該檢查XMLHttpRequest對象的status狀態(tài)碼來確定收到的是“200 OK”而不是“404 Not Found”的HTTP響應




progress
  progress事件會在瀏覽器接收新數(shù)據(jù)期間周期性地觸發(fā)。而onprogress事件處理程序會接收到一個event對象,其target屬性是XHR對象,但包含著三個額外的屬性:lengthComputable、loaded和total。其中,lengthComputable是一個表示進度信息是否可用的布爾值,loaded表示已經(jīng)接收的字節(jié)數(shù),total表示根據(jù)Content-Length響應頭部確定的預期字節(jié)數(shù)。有了這些信息,就可以為用戶創(chuàng)建一個進度指示器了





上傳進度
  除了為監(jiān)控HTTP響應的加載定義的這些有用的事件外,XHR2也給出了用于監(jiān)控HTTP請求上傳的事件。在實現(xiàn)這些特性的瀏覽器中,XMLHttpRequest對象將有upload屬性。upload屬性值是一個對象,它定義了addEventListener()方法和整個progress事件集合,比如onprogress和onload(但upload對象沒有定義onreadystatechange屬性,upload僅能觸發(fā)新的事件類型)

  能僅僅像使用常見的progress事件處理程序一樣使用upload事件處理程序。對于XMLHttpRequest對象,設置XHR.onprogress以監(jiān)控響應的下載進度,并且設置XHR.upload.onprogress以監(jiān)控請求的上傳進度






error_reporting(E_ALL & ~E_NOTICE);
touch($file);
if(preg_match("/image/",apache_request_headers()["content-type"])){

$file = "photo/test.jpg"; 
binary_to_file($file);
echo "文件上傳成功!";

}else{

echo "文件格式不正確,請選擇圖片文件";

}
function binary_to_file($file){

$content = $GLOBALS["HTTP_RAW_POST_DATA"];  // 需要php.ini設置
if(empty($content)){
    $content = file_get_contents("php://input"); //不需要php.ini設置,內(nèi)存壓力小
}
$ret = file_put_contents($file, $content, true);
return $ret;

};
?>
其他事件
  HTTP請求無法完成有3種情況,對應3種事件。如果請求超時,會觸發(fā)timeout事件。如果請求中止,會觸發(fā)abort事件。最后,像太多重定向這樣的網(wǎng)絡錯誤會阻止請求完成,但這些情況發(fā)生時會觸發(fā)error事件

  可以通過調(diào)用XMLHttpRequest對象的abort()方法來取消正在進行的HTTP請求。調(diào)用abort()方法在這個對象上觸發(fā)abort事件

  調(diào)用abort()的主要原因是完成取消或超時請求消耗的時間太長或當響應變得無關(guān)時。假如使用XMLHttpRequest為文本輸入域請求自動完成推薦。如果用戶在服務器的建議達到之前輸入了新字符,這時等待請求不再有用,應該中止

  XHR對象的timeout屬性等于一個整數(shù),表示多少毫秒后,如果請求仍然沒有得到結(jié)果,就會自動終止。該屬性默認等于0,表示沒有時間限制

  如果請求超時,將觸發(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("請求結(jié)束");    

}

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/103033.html

相關(guān)文章

  • AJAX原理與CORS跨域

    摘要:同源策略指的是當前頁面和目標協(xié)議域名和端口均相同。發(fā)出請求的頁面所在域。響應的頭部信息在后端處理,不在此處講解。該事件會在數(shù)據(jù)接收期間不斷觸發(fā),但間隔不確定。服務器確認允許之后,才發(fā)起實際的請求。 ajax作為前端開發(fā)必需的基礎(chǔ)能力之一,你可能會使用它,但并不一定懂得其原理,以及更深入的服務器通信相關(guān)的知識。在最近兩天的整理過程中,看了大量的文章,發(fā)現(xiàn)自己的后端能力已經(jīng)限制自己在網(wǎng)絡通...

    jeyhan 評論0 收藏0
  • 深入淺出Ajax

    摘要:在接收響應期間持續(xù)不斷地觸發(fā)。在請求發(fā)生錯誤時觸發(fā)。在通信完成或者觸發(fā)或事件后觸發(fā)。已經(jīng)接收到部分響應數(shù)據(jù)。基于標準被廣泛支持。破壞程序的異常處理機制。 原文(我的GitHub):https://github.com/liangfengbo/frontend-ability/issues/1 學習大綱 理解Ajax的工作原理 Ajax核心-XMLHttpRequest對象 封裝Aja...

    megatron 評論0 收藏0
  • 再也不學AJAX了?。ǘ┦褂?em>AJAX

    摘要:隨著對象被廣泛的接收,也開始著手制定相應的標準來規(guī)范其行為。四設置請求頭每個請求和響應都會帶有相應的頭部信息,包含一些與數(shù)據(jù),收發(fā)者網(wǎng)絡環(huán)境與狀態(tài)等相關(guān)信息。該方法會令對象實例停止觸發(fā)事件,并且不再允許訪問任何和響應有關(guān)的對象屬性。 在上一篇文章中我們知道,AJAX是一系列技術(shù)的統(tǒng)稱。在本篇中我們將更進一步,詳細解釋如何使用Ajax技術(shù)在項目中獲取數(shù)據(jù)。而為了解釋清楚,我們首先要搞清楚...

    nemo 評論0 收藏0
  • jQloader 開源,集成 ajax、history、loading、orderTemplate

    摘要:一款精簡而豐富的微型框架,非常適合以為核心的項目使用。并集成指令模板進度條效果等功能。雖然支持載入頁面的運行,但是由于安全限制以及可能出現(xiàn)的重復運行的問題,建議將所有寫在主頁面,事件以委托方式綁定。使用模式請求頁面,這樣可以保證是完全重載。 jQloader v0.2.3 一款精簡而豐富的微型框架,非常適合以 jQuery 為核心的項目使用。 它的核心功能為 ajax + pushS...

    JohnLui 評論0 收藏0

發(fā)表評論

0條評論

spacewander

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<