亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

AJAX學(xué)習(xí)筆記1:XHR對(duì)象介紹

Bowman_han / 3452人閱讀

摘要:是第一款引入對(duì)象的瀏覽器。在中,對(duì)象是通過(guò)庫(kù)中的一個(gè)對(duì)象實(shí)現(xiàn)的。在收到響應(yīng)后,響應(yīng)的數(shù)據(jù)會(huì)自動(dòng)填充對(duì)象的屬性,相關(guān)的屬性簡(jiǎn)介如下。作為響應(yīng)主體被返回的文本。屬性對(duì)象的屬性表示請(qǐng)求響應(yīng)過(guò)程的當(dāng)前活動(dòng)階段。

創(chuàng)建Ajax對(duì)象的跨瀏覽器兼容方法

Ajax 技術(shù)的核心是 XMLHttpRequest 對(duì)象(簡(jiǎn)稱 XHR),這是由微軟首先引入的一個(gè)特性,其他瀏覽器提供商后來(lái)都提供了相同的實(shí)現(xiàn)。IE5 是第一款引入 XHR 對(duì)象的瀏覽器。在 IE5 中, XHR 對(duì)象是通過(guò) MSXML 庫(kù)中的一個(gè) ActiveX對(duì)象實(shí)現(xiàn)的。因此,在 IE 中可能會(huì)遇到三種不同版本的 XHR 對(duì)象,即 MSXML2.XMLHttp、MSXML2.XMLHttp.3.0 和 MXSML2.XMLHttp.6.0。因此,創(chuàng)建XHR對(duì)象應(yīng)該是用一個(gè)函數(shù):

//適用于 IE7 之前的版本
function createXHR(){
    if (typeof arguments.callee.activeXString != "string"){
        var versions = ["MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0",
        "MSXML2.XMLHttp"],i, len;
        for (i=0,len=versions.length; i < len; i++){
            try {
                new ActiveXObject(versions[i]);
                arguments.callee.activeXString = versions[i];
                break;
            } catch (ex){
                //跳過(guò)
            }
        }
    }
    return new ActiveXObject(arguments.callee.activeXString);
}

鑒于IE7+、 Firefox、 Opera、 Chrome 和 Safari 都支持原生的 XHR 對(duì)象,在這些瀏覽器中創(chuàng)建 XHR 對(duì)象要像下面這樣使用 XMLHttpRequest 構(gòu)造函數(shù)。

var xhr = new XMLHttpRequest();

在必須支持IE7以下版本時(shí),必須使用以下函數(shù):

function createXHR(){
    /*如果瀏覽器支持原生XMLHttpRequest對(duì)象,返回用原生對(duì)象創(chuàng)建的XMLHttpRequest對(duì)象*/
    if (typeof XMLHttpRequest != "undefined"){
        return new XMLHttpRequest();
    } else if (typeof ActiveXObject != "undefined"){
     //否則使用MSXML庫(kù)的ActiveX對(duì)象創(chuàng)建
    if (typeof arguments.callee.activeXString != "string"){
        var versions = [ "MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0",
        "MSXML2.XMLHttp"],i, len;
        for (i=0,len=versions.length; i < len; i++){
            try {
                new ActiveXObject(versions[i]);
                arguments.callee.activeXString = versions[i];
                break;
            } catch (ex){
                //跳過(guò)
            }
        }
    }
    return new ActiveXObject(arguments.callee.activeXString);
    } else {   //都不支持則返回錯(cuò)誤
    throw new Error("No XHR object available.");
    }
}

創(chuàng)建對(duì)象的瀏覽器兼容方式是 var xhr = createXHR();

XHR對(duì)象的兩個(gè)方法

open():它接受 3 個(gè)參數(shù):要發(fā)送的請(qǐng)求的類型("get"、 "post"等) 、請(qǐng)求的 URL 和表示是否異步發(fā)送請(qǐng)求的布爾值(true代表異步,false代表同步,默認(rèn)是是異步)。下面就是調(diào)用這個(gè)方法的例子。
xhr.open("get", "example.php", false);
調(diào)用 open()方法并不會(huì)真正發(fā)送請(qǐng)求,而只是啟動(dòng)一個(gè)請(qǐng)求以備發(fā)送。具體發(fā)送請(qǐng)求需要使用.send()方法。

send()方法:
xhr.open("get", "example.txt", false);
xhr.send(null);
這里的 send()方法接收一個(gè)參數(shù),即要作為請(qǐng)求主體發(fā)送的數(shù)據(jù)。如果不需要通過(guò)請(qǐng)求主體發(fā)送數(shù)據(jù),則必須傳入 null,因?yàn)檫@個(gè)參數(shù)對(duì)有些瀏覽器來(lái)說(shuō)是必需的。

在收到響應(yīng)后,響應(yīng)的數(shù)據(jù)會(huì)自動(dòng)填充 XHR 對(duì)象的屬性,相關(guān)的屬性簡(jiǎn)介如下。
? responseText:作為響應(yīng)主體被返回的文本。
? responseXML:如果響應(yīng)的內(nèi)容類型是"text/xml"或"application/xml",這個(gè)屬性中將保
存包含著響應(yīng)數(shù)據(jù)的 XML DOM 文檔。對(duì)于非XML數(shù)據(jù),responseXML的值是null。
? status:響應(yīng)的 HTTP 狀態(tài)。200~300之間是正常響應(yīng),304表示請(qǐng)求的資源未修改,因此可以使用瀏覽器中緩存的數(shù)據(jù),也即響應(yīng)有效。
? statusText: HTTP 狀態(tài)的說(shuō)明。

readyState 屬性

XHR 對(duì)象的 readyState 屬性表示請(qǐng)求/響應(yīng)過(guò)程的當(dāng)前活動(dòng)階段。這個(gè)屬性可取的值如下。
? 0:未初始化。尚未調(diào)用 open()方法。
? 1:?jiǎn)?dòng)。已經(jīng)調(diào)用 open()方法,但尚未調(diào)用 send()方法。
? 2:發(fā)送。已經(jīng)調(diào)用 send()方法,但尚未接收到響應(yīng)。
? 3:接收。已經(jīng)接收到部分響應(yīng)數(shù)據(jù)。
? 4:完成。已經(jīng)接收到全部響應(yīng)數(shù)據(jù),而且已經(jīng)可以在客戶端使用了。
只要 readyState 屬性的值由一個(gè)值變成另一個(gè)值,都會(huì)觸發(fā)一次 onreadystatechange 事件。可以利用這個(gè)事件來(lái)檢測(cè)每次狀態(tài)變化后 readyState 的值。通常,我們只對(duì) readyState 值為 4 的階段感興趣,因?yàn)檫@時(shí)所有數(shù)據(jù)都已經(jīng)就緒。不過(guò),必須在調(diào)用 open()之前指定 onreadystatechange事件處理程序才能確保跨瀏覽器兼容性。使用DOM0級(jí)事件處理程序的代碼如下:

var xhr = createXHR();
xhr.onreadystatechange = function(){
    if (xhr.readyState == 4){ //每次readyState改變都檢查一次,僅當(dāng)4時(shí)才真正作用
            //如果狀態(tài)碼>200且<300,或者為304,輸出響應(yīng)文本
        if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304){
            alert(xhr.responseText);
        } else {
            alert("Request was unsuccessful: " + xhr.status);
        }
    }
};
xhr.open("get", "example.txt", true); //添加onreadystatechange事件后使用open()方法
xhr.send(null);

XHR的兩種請(qǐng)求方式:GET and POST

GET請(qǐng)求:
GET 是最常見的請(qǐng)求類型,最常用于向服務(wù)器查詢某些信息。必要時(shí),可以將查詢字符串參數(shù)追加到 URL 的末尾,以便將信息發(fā)送給服務(wù)器。對(duì) XHR 而言,位于傳入 open()方法的 URL 末尾的查詢字符串必須經(jīng)過(guò)正確的編碼才行。使用 GET 請(qǐng)求經(jīng)常會(huì)發(fā)生的一個(gè)錯(cuò)誤,就是查詢字符串的格式有問(wèn)題。查詢字符串中每個(gè)參數(shù)的名稱和值都必須使用 encodeURIComponent()進(jìn)行編碼,然后才能放到 URL 的末尾;而且所有名-值對(duì)兒都必須由和號(hào)(&)分隔:

xhr.open("get", "example.php?name1=value1&name2=value2", true);

POST請(qǐng)求:通常用于向服務(wù)器發(fā)送應(yīng)該被保存的數(shù)據(jù)。 POST 請(qǐng)求應(yīng)該把數(shù)據(jù)作為請(qǐng)求的主體提交,而 GET 請(qǐng)求傳統(tǒng)上不是這樣。 POST 請(qǐng)求的主體可以包含非常多的數(shù)據(jù),
而且格式不限。在 open()方法第一個(gè)參數(shù)的位置傳入"post",就可以初始化一個(gè) POST 請(qǐng)求,如下面的例子所示。

xhr.open("post", "example.php", true);

發(fā)送 POST 請(qǐng)求的第二步就是向 send()方法中傳入某些數(shù)據(jù)。由于 XHR 最初的設(shè)計(jì)主要是為了處理 XML,因此可以在此傳入 XML DOM 文檔,傳入的文檔經(jīng)序列化之后將作為請(qǐng)求主體被提交到服務(wù)器。當(dāng)然,也可以在此傳入任何想發(fā)送到服務(wù)器的字符串。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/80420.html

相關(guān)文章

  • AJAX學(xué)習(xí)筆記

    摘要:的學(xué)習(xí)筆記是異步和的縮寫,它的作用是執(zhí)行異步的網(wǎng)絡(luò)請(qǐng)求。這就是一個(gè)格式的,向這個(gè)地址請(qǐng)求,將得到一個(gè)回調(diào)函數(shù),執(zhí)行就得到數(shù)據(jù)。 AJAX的學(xué)習(xí)筆記 AJAX是異步JavaScript和XML的縮寫,它的作用是執(zhí)行異步的網(wǎng)絡(luò)請(qǐng)求。因?yàn)镴S是線性同步,如果需要用戶向?yàn)g覽器發(fā)送一個(gè)請(qǐng)求,那么就需要等瀏覽器接收到了結(jié)果才能繼續(xù)運(yùn)行,如果發(fā)送到接受的時(shí)間太長(zhǎng),瀏覽器就會(huì)很長(zhǎng)時(shí)間處于假死狀態(tài),這樣...

    RobinTang 評(píng)論0 收藏0
  • AJAX學(xué)習(xí)筆記2:XHR實(shí)現(xiàn)跨域資源共享(CORS)以及和JSONP的對(duì)比

    摘要:補(bǔ)充同源策略還應(yīng)該對(duì)一些特殊情況做處理,比如限制協(xié)議下腳本的訪問(wèn)權(quán)限。注意,該請(qǐng)求的查詢字符串有一個(gè)參數(shù),用來(lái)指定回調(diào)函數(shù)的名字,這對(duì)于是必需的。 1 前言: 首先對(duì)參考文章作者表示感謝,你們的經(jīng)驗(yàn)總結(jié)給我們這些新手提供了太多資源。本文致力于解決AJAX的CORS問(wèn)題,我在邏輯上進(jìn)行了梳理:首先,系統(tǒng)的總結(jié)了CORS問(wèn)題的起源---同源策略;其次,介紹JSONP這種僅能支持GET請(qǐng)求的...

    QiuyueZhong 評(píng)論0 收藏0
  • AJAX學(xué)習(xí)筆記2:XHR實(shí)現(xiàn)跨域資源共享(CORS)以及和JSONP的對(duì)比

    摘要:補(bǔ)充同源策略還應(yīng)該對(duì)一些特殊情況做處理,比如限制協(xié)議下腳本的訪問(wèn)權(quán)限。注意,該請(qǐng)求的查詢字符串有一個(gè)參數(shù),用來(lái)指定回調(diào)函數(shù)的名字,這對(duì)于是必需的。 1 前言: 首先對(duì)參考文章作者表示感謝,你們的經(jīng)驗(yàn)總結(jié)給我們這些新手提供了太多資源。本文致力于解決AJAX的CORS問(wèn)題,我在邏輯上進(jìn)行了梳理:首先,系統(tǒng)的總結(jié)了CORS問(wèn)題的起源---同源策略;其次,介紹JSONP這種僅能支持GET請(qǐng)求的...

    makeFoxPlay 評(píng)論0 收藏0
  • Ajax學(xué)習(xí)筆記

    摘要:最近在學(xué),剛剛?cè)腴T,用到很多與相關(guān)的交互。也用了挺久的了,想寫一下學(xué)習(xí)筆記來(lái)記錄一下。實(shí)現(xiàn)過(guò)程是的基礎(chǔ),是核心對(duì)象,首先要實(shí)例化一個(gè)對(duì)象進(jìn)行請(qǐng)求,規(guī)定請(qǐng)求的類型以及是否異步處理請(qǐng)求。響應(yīng)服務(wù)器狀態(tài)響應(yīng)服務(wù)器狀態(tài)涉及對(duì)象的三個(gè)重要的屬性。 最近在學(xué)php,剛剛?cè)腴T,用到很多與Ajax相關(guān)的交互。Ajax也用了挺久的了,想寫一下學(xué)習(xí)筆記來(lái)記錄一下。今天先簡(jiǎn)單寫一下原理和過(guò)程。歡迎大家一起探...

    Forest10 評(píng)論0 收藏0
  • Ajax學(xué)習(xí)筆記

    摘要:最近在學(xué),剛剛?cè)腴T,用到很多與相關(guān)的交互。也用了挺久的了,想寫一下學(xué)習(xí)筆記來(lái)記錄一下。實(shí)現(xiàn)過(guò)程是的基礎(chǔ),是核心對(duì)象,首先要實(shí)例化一個(gè)對(duì)象進(jìn)行請(qǐng)求,規(guī)定請(qǐng)求的類型以及是否異步處理請(qǐng)求。響應(yīng)服務(wù)器狀態(tài)響應(yīng)服務(wù)器狀態(tài)涉及對(duì)象的三個(gè)重要的屬性。 最近在學(xué)php,剛剛?cè)腴T,用到很多與Ajax相關(guān)的交互。Ajax也用了挺久的了,想寫一下學(xué)習(xí)筆記來(lái)記錄一下。今天先簡(jiǎn)單寫一下原理和過(guò)程。歡迎大家一起探...

    wing324 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<