AJAX請求

AJAX: Asyncchronous Javascript + XMLL

XMLHttpRequest對象(XHR)

以異步的方式從服務(wù)器獲取數(shù)據(jù),獲取新數(shù)據(jù)后督怜,通過DOM的方式將新數(shù)據(jù)插入到頁面中漩符。

1. 新建XHR對象

  • IE7+思恐、現(xiàn)代瀏覽器d都支持原生的XHR對象

var xhr = new XMLHttpRequest();

2. open(method, url, boolean)

  • method: 發(fā)送請求的類型(get荒吏、post敛惊、delete、put等)
  • url: 請求URL(相對路徑是相對于當(dāng)前頁面或者絕對路徑)
  • boolean: 是否異步發(fā)送請求

3. send():一個參數(shù)绰更,作為請求主體發(fā)送的數(shù)據(jù)瞧挤,或者為null

收到相應(yīng)請求后,響應(yīng)數(shù)據(jù)會自動填充XHR對象的屬性儡湾。

  • responseTetx 作為響應(yīng)主體被返回的文本特恬。
  • responseXML 響應(yīng)類型是text/xml或者application/xml,保存包含響應(yīng)數(shù)據(jù)的XML DOM文檔徐钠。
  • status HTTP響應(yīng)狀態(tài)
  • statusText HTTP響應(yīng)狀態(tài)說明

4. 同步方式請求

var xhr = new XMLHttpRequest();
xhr.open('get', 'example.json', false);
xhr.send(null);

if((xhr.status > 200 && xhr.status < 300) || xhr.status == 304){
        //xhr.responseText;
        //通過檢測xhr.status來檢測請求返回狀態(tài)癌刽,不要依賴statusText,因?yàn)榭鐬g覽器時statusText不可靠
}else{
        //請求錯誤, 輸出錯誤log:xhr.status
}

5. 異步方式請求

異步請求,檢測XHR對象的<code>readyState</code>屬性妒穴,該屬性表示請求/響應(yīng)過程中的當(dāng)前活動階段。

  • 0 : 未初始化摊崭。尚未調(diào)用open()方法讼油。
  • 1 : 啟動。已經(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值變化都會觸發(fā)readystatechange時間

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
  if(xhr.readyState == 4){
    if(xhr.status > 200 && xhr.status < 300 || xhr.status == 304){
      alert(xhr.reponseText);
    }else{
      alert("Request was unsuccessful: " + xhr.status);
  }
}
xhr.open('get', 'example.json', true);
xhr.send(null);

6. 取消異步請求

xhr.abort()

7.HTTP頭部信息

  • Accept 瀏覽器處理的內(nèi)容類型
  • Accept-Charset 顯示的字符集
  • Accept-Econding 處理的壓縮編碼
  • Connection 與服務(wù)器之間的連接類型
  • Cookie Cookie設(shè)置
  • Host 發(fā)出請求所在的域
  • Referer 發(fā)出請求坐在的URI

xhr.setRequestHeader('HeaderName', 'HeaderVal'); 使用自定義的頭部字段名稱校辩,有些瀏覽器禁止修改默認(rèn)的頭部字段 。
xhr.getResponseHeader('HeaderName');
xhr.getAllResponseHeaders();


function create_connect_obj(){
    if(window.ActiveXObject!='undefined' && window.ActiveXObject!=undefined){
        return new ActiveXObject('Microsoft.XMLHTTP');
    }else if(window.XMLHttpRequest!='undefined' && window.XMLHttpRequest!=undefined){
        return new XMLHttpRequest();
    }
}

var doget=function(url,data,success,fail){
    var conn=create_connect_obj();
    if(typeof(data)=='object'){
        var str='';
        for(var i in data){
            str+='&'+i+'='+data[i];
        }
        str=str.substr(1);
        if(url.indexOf('?')!=-1){
            url+=str;
        }else{
            url+='?'+str;
        }
    }else if(typeof(data)=='string'){
        if(url.indexOf('?')!=-1){
            url+=data;
        }else{
            url+='?'+data;
        }
    }
    conn.open('GET',url);
    conn.send(null);
    conn.onreadystatechange=function(){
        if(conn.readyState==4 && conn.status==200){
            if(typeof(data)=='function'){
                data(conn.response);
            }else if(typeof(success)=='function'){
                success(conn.response); //success
            }
        }else{
            if(typeof(fail)=='function'){   //fail
                fail(); 
            }
        }
    }
}

var dopost=function(url,data,success,fail){
    var conn=create_connect_obj();
    conn.open('POST',url);
    conn.setRequestHeader('Content-type','application/x-www-form-urlencoded');

    if(typeof(data)=='object'){
        var str='';
        for(var i in data){
            str+='&'+i+'='+data[i];
        }
        str=str.substr(1);
        conn.send(data);
    }else if(typeof(data)=='string'){
        conn.send(data);
    }else{
        conn.send(null);
    }
    conn.onreadystatechange=function(){
        if(conn.readyState==4 && conn.status==200){
            if(typeof(data)=='function'){
                data(conn.response);
            }else if(typeof(success)=='function'){
                success(conn.response); //success
            }
        }else{
            if(typeof(fail)=='function'){   //fail
                fail(); 
            }
        }
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辆童,一起剝皮案震驚了整個濱河市宜咒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌把鉴,老刑警劉巖故黑,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異庭砍,居然都是意外死亡场晶,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門怠缸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來峰搪,“玉大人,你說我怎么就攤上這事凯旭「懦埽” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵罐呼,是天一觀的道長鞠柄。 經(jīng)常有香客問我,道長嫉柴,這世上最難降的妖魔是什么厌杜? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上夯尽,老公的妹妹穿的比我還像新娘瞧壮。我一直安慰自己,他們只是感情好匙握,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布咆槽。 她就那樣靜靜地躺著,像睡著了一般圈纺。 火紅的嫁衣襯著肌膚如雪秦忿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天蛾娶,我揣著相機(jī)與錄音灯谣,去河邊找鬼。 笑死蛔琅,一個胖子當(dāng)著我的面吹牛胎许,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播罗售,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼呐萨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了莽囤?” 一聲冷哼從身側(cè)響起谬擦,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎朽缎,沒想到半個月后惨远,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡话肖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年北秽,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片最筒。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡贺氓,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出床蜘,到底是詐尸還是另有隱情辙培,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布邢锯,位于F島的核電站扬蕊,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏丹擎。R本人自食惡果不足惜尾抑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一歇父、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧再愈,春花似錦榜苫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至府适,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間肺樟,已是汗流浹背檐春。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留么伯,地道東北人疟暖。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像田柔,于是被迫代替她去往敵國和親俐巴。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理硬爆,服務(wù)發(fā)現(xiàn)欣舵,斷路器,智...
    卡卡羅2017閱讀 134,659評論 18 139
  • Ajax和XMLHttpRequest 我們通常將Ajax等同于XMLHttpRequest缀磕,但細(xì)究起來它們兩個是...
    changxiaonan閱讀 2,238評論 0 2
  • AJAX = Asynchronous JavaScript and XML(異步的 JavaScript 和 X...
    源大俠閱讀 508評論 0 1
  • ajax 的全稱是Asynchronous JavaScript and XML缘圈,其中,Asynchronous ...
    呼呼呼lys閱讀 1,412評論 0 4
  • 92年的我袜蚕,在這里為大家講述糟把,本人從零打造一百萬的真實(shí)經(jīng)歷。 2014年牲剃,是我開始改變的第一年遣疯。踏入22年,我順利...
    深山小牧童閱讀 1,016評論 0 1