ajax簡(jiǎn)單封裝

工作之余簡(jiǎn)單封裝了ajax的請(qǐng)求忠怖,但是工作中還是用jquery,axios,angular內(nèi)部封裝好了http模塊(笑)暴凑。

ajax一般分為簡(jiǎn)單的四部:

  1. 創(chuàng)建ajax對(duì)象(這里兼容ie的話要做一下處理)
  2. 連接,即請(qǐng)求對(duì)象的open方法(get和post還有點(diǎn)不同赘来,get參數(shù)要放在url后面现喳,post要設(shè)置請(qǐng)求頭)
  3. 發(fā)送,即請(qǐng)求對(duì)象的send函數(shù)(post參數(shù)則放在send里面)
  4. 接收犬辰,在onreadystatechange(存儲(chǔ)函數(shù)或函數(shù)名嗦篱,每當(dāng)readyState屬性改變時(shí),就會(huì)調(diào)用該函數(shù)幌缝。)函數(shù)里面處理灸促。

還可以加上超時(shí)這些

onreadystatechange分析

  1. 要先判斷readyState的狀態(tài)(有四個(gè)狀態(tài))

    ①: 0,請(qǐng)求未初始化;

    ②: 1腿宰,服務(wù)器連接已建立呕诉;

    ③: 2,請(qǐng)求已接收吃度;

    ④: 3甩挫,請(qǐng)求處理中;

    ⑤: 4椿每,請(qǐng)求已完成伊者,且響應(yīng)已就緒

  2. 當(dāng)readyState等于4時(shí),你又要判斷status的狀態(tài)

  3. 請(qǐng)求成功時(shí)status狀態(tài) 200-300(不包括300) 间护,還有304(是緩存)(具體狀態(tài)可以去參考文檔)

  4. 在成功(失斠嗌)的回掉函數(shù)里面將xhr.responseText的值返回出去。

代碼

'use strict';

var $ = {};
$.ajax = ajax;

function ajax(options) {

  // 解析參數(shù)
  options = options || {};
  if (!options.url) return;
  options.type = options.type || 'get';
  options.timeout = options.timeout || 0;

  // 1 創(chuàng)建ajax
  if (window.XMLHttpRequest) {

    // 高級(jí)瀏覽器和ie7以上
    var xhr = new XMLHttpRequest();
  } else {

    //ie6,7,8
    var xhr = new ActiveXObject("Microsoft.XMLHTTP"); 
  }

  // 2 連接
  var str = jsonToUrl(options.data);
  if (options.type === 'get') {
    xhr.open('get', `${options.url}?${str}`, true);

    // 3 發(fā)送
    xhr.send();
  } else {
    xhr.open('post', options.url, true);

    // 請(qǐng)求頭
    xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

    // 3 發(fā)送
    xhr.send();
  }

  // 接收
  xhr.onreadystatechange = function() {

    // 完成
    if (xhr.readyState === 4) {

      // 清除定時(shí)器
      clearTimeout(timer);

      if (xhr.status >= 200 && xhr.status < 300 || xhr.status == 304) {

        // 成功
        options.success && options.success(xhr.responseText);
      } else {
        options.error && options.error( xhr.status );
      }
    }
  };

  
  // 超時(shí)
  if (options.timeout) {
    var timer = setTimeout(function(){ 
            alert("超時(shí)了");
            xhr.abort(); // 終止
        },options.timeout);
  }
}


// json轉(zhuǎn)url
function jsonToUrl(json) {
  var arr = [];
  json.t = Math.random();
  for(var name in json) {
    arr.push(name + '=' + encodeURIComponent(json[name]));
  }
  return arr.join('&');
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末汁尺,一起剝皮案震驚了整個(gè)濱河市法精,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌痴突,老刑警劉巖搂蜓,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異辽装,居然都是意外死亡帮碰,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)拾积,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)殉挽,“玉大人,你說(shuō)我怎么就攤上這事拓巧∷孤担” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵玲销,是天一觀的道長(zhǎng)输拇。 經(jīng)常有香客問(wèn)我,道長(zhǎng)贤斜,這世上最難降的妖魔是什么策吠? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮瘩绒,結(jié)果婚禮上猴抹,老公的妹妹穿的比我還像新娘。我一直安慰自己锁荔,他們只是感情好蟀给,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般跋理。 火紅的嫁衣襯著肌膚如雪择克。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,764評(píng)論 1 290
  • 那天前普,我揣著相機(jī)與錄音肚邢,去河邊找鬼。 笑死拭卿,一個(gè)胖子當(dāng)著我的面吹牛骡湖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播峻厚,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼响蕴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了惠桃?” 一聲冷哼從身側(cè)響起浦夷,我...
    開(kāi)封第一講書(shū)人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎刽射,沒(méi)想到半個(gè)月后军拟,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡誓禁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了肾档。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片摹恰。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖怒见,靈堂內(nèi)的尸體忽然破棺而出俗慈,到底是詐尸還是另有隱情,我是刑警寧澤遣耍,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布闺阱,位于F島的核電站,受9級(jí)特大地震影響舵变,放射性物質(zhì)發(fā)生泄漏酣溃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一纪隙、第九天 我趴在偏房一處隱蔽的房頂上張望赊豌。 院中可真熱鬧,春花似錦绵咱、人聲如沸碘饼。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)艾恼。三九已至住涉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間钠绍,已是汗流浹背秆吵。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留五慈,地道東北人纳寂。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像泻拦,于是被迫代替她去往敵國(guó)和親毙芜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

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

  • 一争拐,絕望的內(nèi)涵 克爾愷郭爾《致死的疾病》一書(shū)的副標(biāo)題是 為了使人類(lèi)受教益和得醒悟而做得基督教心理學(xué)解說(shuō)腋粥,乍一看本書(shū)...
    QIU_C閱讀 528評(píng)論 0 2
  • 阿莫心里復(fù)雜極了,直到手機(jī)鈴聲響起才打斷了阿莫的回想架曹,阿莫皺了皺眉隘冲,看了眼放在地上的早飯,心里不知道在想什么绑雄,轉(zhuǎn)...
    三舅大口閱讀 178評(píng)論 0 0
  • 你們好展辞,我叫Jack。 我叫Jack因?yàn)槲液芸嵬蛭覝喩矶际倾y白色的罗珍。 怎么樣,強(qiáng)不強(qiáng)脚粟?為了讓我的毛更亮覆旱,我每天都吃...
    中班馬鈴薯小鬼閱讀 403評(píng)論 0 0
  • 人體以健康的狀態(tài)來(lái)到人間扣唱! 如果,陽(yáng)光团南、空氣噪沙、水、食物已慢、以及心情都在正常狀態(tài)曲聂,那么身體,就不會(huì)輕易失去健康佑惠。 健康...
    九子蘭閱讀 1,103評(píng)論 0 0
  • 我是一個(gè)自由的人 沙漠是我的心房 戈壁是我的胸膛 藍(lán)天是我的舞臺(tái) 雄鷹是我的翅膀 沒(méi)有煩惱沒(méi)有惆悵 自由的我在藍(lán)天...
    貨車(chē)司機(jī)牛二哥閱讀 135評(píng)論 0 3