淺談AJAX

ajax大家應(yīng)該都會(huì)很熟悉符喝,我們?cè)诠ぷ髦谢蚨嗷蛏俚亩紩?huì)接觸到ajax谤祖,今天我來談一談我對(duì)ajax的理解婿滓。

什么是ajax

AJAX全稱為“Asynchronous JavaScript and XML”(異步JavaScript和XML),是一種創(chuàng)建交互式網(wǎng)頁應(yīng)用的網(wǎng)頁開發(fā)技術(shù)泊脐。我覺得ajax更像是一把鑰匙空幻,一把打開前端后端之間那道門的鑰匙。

ajax相比form表單的優(yōu)勢(shì)

很早之前我們都會(huì)采用form表單進(jìn)行數(shù)據(jù)的傳輸容客,但是這里卻又很多問題比如:1.刷新頁面(用戶體驗(yàn)不好)2.不能從服務(wù)器取數(shù)據(jù)
然而ajax可以在不重新加載整個(gè)網(wǎng)頁的情況下,對(duì)網(wǎng)頁的某部分進(jìn)行更新约郁,并且能獲取到后臺(tái)返回給我們的數(shù)據(jù)缩挑,小伙伴們覺得那個(gè)更適合我們使用呢。

ajax的傳輸方式及區(qū)別

大家應(yīng)該都知道ajax的傳輸方式可以分為get和post兩種鬓梅,然而它們之間卻有一些差別:

| 類型 | 大小 | 安全程度 | 傳輸方式 | 是否利于分享 |
|:-------------:|:-------------:|:-------------:|:-------------:|:-------------:|:-------------:|
| GET | 32kB | 不安全 | url傳輸 | 是 |
| POST | 1GB | 相對(duì)安全 | 非url傳輸數(shù)據(jù) | 不是 |

ajax的注意事項(xiàng)

  1. 在服務(wù)器環(huán)境下運(yùn)行
  2. 有緩存 (get)應(yīng)該在傳輸?shù)臄?shù)據(jù)后面采用:
    Math.random();
    new Date().getTime();
  3. 不用關(guān)心文件后綴名
  4. 編碼格式要一致
  5. 返回的都是字符串

ajax的創(chuàng)建步驟

在提到ajax的創(chuàng)建步驟之前我們先聊一聊打電話把供置,當(dāng)你要給別人打電話的時(shí)候我們需要準(zhǔn)備什么呢?首先我們需要弄到一個(gè)手機(jī)(怎么弄到的我就不問了哈),之后我們要撥打?qū)Ψ降奶?hào)碼绽快,然后我們當(dāng)然要跟他說一些事情啦芥丧,最后我們應(yīng)該聽他對(duì)我們的反饋(難不成你要說完就把電話掛斷嗎?)其實(shí)仔細(xì)想想這與ajax創(chuàng)建過程不是一樣嗎坊罢?

  1. 創(chuàng)建ajax對(duì)象
if (window.XMLHttpRequest) {
    //高版本瀏覽器
    var oAjax=new XMLHttpRequest();
} else{
    //兼容ie低版本
    var oAjax=new ActiveXObject('Microsoft.XMLHTTP');
}
  1. 建立連接
    //GET方式,這里的data應(yīng)該為json形式name=value&name1=value...
    oAjax.open('GET',url+'?'+data,true);
    //POST方式
    oAjax.open('POST',url,true);
  1. 發(fā)送請(qǐng)求
//GET方式
 oAjax.send();
//POST方式续担,這里需要設(shè)置請(qǐng)求頭
oAjax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
//這里的data應(yīng)該為json形式name=value&name1=value...
oAjax.send(data);
  1. 接收數(shù)據(jù)
//這里的fnSucc和fnErr分別為成功的回調(diào)函數(shù),以及失敗的回調(diào)函數(shù)
oAjax.onreadystatechange=function(){
    if(oAjax.readyState==4){
        if(oAjax.status>=200&&oAjax.status<300 ||oAjax.status==304){
          fnSucc && fnSucc(oAjax.responseText);
        }else{
            fnErr && fnErr(oAjax.status);
      }
    }
};

ajax中readyState的狀態(tài)以及代表的含義

狀態(tài) 含義
0 UNSEND ajax對(duì)象已經(jīng)準(zhǔn)備完畢活孩,但是還沒有打開連接
1 OPENDED 已經(jīng)打開連接(建立好連接)
2 HEADERS-RECEVICED 發(fā)送請(qǐng)求完畢物遇,頭部信息也接收完畢了
3 LOADING 下載內(nèi)容(接收內(nèi)容)
4 DONE 操作完畢

類似于jQuery的方式封裝ajax

function ajax(json){
    if(!json.url){
        alert('請(qǐng)求出錯(cuò)');
        return false;
    }
    json.time=json.time||3000;
    json.type=json.type||'get';
    json.data=json.data||{};
    var timer=null;
    if(window.XMLHttpRequest){
        var oAjax=new XMLHttpRequest();
    }else{
        var oAjax=new ActiveXObject("Microsoft.XMLHTTP");
    }
    switch (json.type.toLowerCase()){
        case 'get':
            oAjax.open('GET',json.url+'?'+jsonToStr(json.data),true);
            oAjax.send();
        break;
        case 'post':
            oAjax.open('POST',json.url,true);
            oAjax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
            oAjax.send(jsonToStr(json.data));
        break;
    }
    oAjax.onreadystatechange=function(){
        if(oAjax.readyState==4){
            if(oAjax.status>=200&&oAjax.status<300||oAjax.status==304){
                json.success&&json.success(oAjax.responseText);
            }else{
                json.error&&json.error(oAjax.status);
            }
            clearTimeout(timer);
        }
    }
    timer=setTimeout(function(){
        alert('服務(wù)器超時(shí)');
        oAjax.onreadystatechange=null;
    },json.time);
    function jsonToStr(json){
        var arr=[];
        json.t=Math.random();
        for(var name in json){
            arr.push(name+'='+json[name]);
        }
        return arr.join('&');
    }
}

感謝大家的觀看謝謝!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末憾儒,一起剝皮案震驚了整個(gè)濱河市询兴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌起趾,老刑警劉巖诗舰,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異训裆,居然都是意外死亡眶根,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門缭保,熙熙樓的掌柜王于貴愁眉苦臉地迎上來汛闸,“玉大人,你說我怎么就攤上這事艺骂≈罾希” “怎么了?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長别伏。 經(jīng)常有香客問我蹄衷,道長,這世上最難降的妖魔是什么厘肮? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任愧口,我火速辦了婚禮,結(jié)果婚禮上类茂,老公的妹妹穿的比我還像新娘耍属。我一直安慰自己,他們只是感情好巩检,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布厚骗。 她就那樣靜靜地躺著,像睡著了一般兢哭。 火紅的嫁衣襯著肌膚如雪领舰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天迟螺,我揣著相機(jī)與錄音冲秽,去河邊找鬼。 笑死矩父,一個(gè)胖子當(dāng)著我的面吹牛锉桑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播浙垫,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼刨仑,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了夹姥?” 一聲冷哼從身側(cè)響起杉武,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎辙售,沒想到半個(gè)月后轻抱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡旦部,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年祈搜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片士八。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡容燕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出婚度,到底是詐尸還是另有隱情蘸秘,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站醋虏,受9級(jí)特大地震影響寻咒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜颈嚼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一毛秘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧阻课,春花似錦叫挟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至晰骑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間绊序,已是汗流浹背硕舆。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留骤公,地道東北人抚官。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像阶捆,于是被迫代替她去往敵國和親凌节。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理洒试,服務(wù)發(fā)現(xiàn)倍奢,斷路器,智...
    卡卡羅2017閱讀 134,628評(píng)論 18 139
  • 一垒棋、什么是ajax卒煞? AJAX(AsynchronousJavaScriptandXML):異步的JavaScri...
    猿基地閱讀 699評(píng)論 0 1
  • AJAX 原生js操作ajax 1.創(chuàng)建XMLHttpRequest對(duì)象 var xhr = new XMLHtt...
    碧玉含香閱讀 3,179評(píng)論 0 7
  • 什么是Ajax AJAX是“Asynchronous JavaScript and XML”的縮寫。他是指一種創(chuàng)建...
    jia林閱讀 259評(píng)論 3 1
  • 一個(gè)勁地濤濤不絕 推銷自己的思想 自己的理念 最終叼架,把自己的個(gè)性 也推銷完了 將一臉燦爛的 微笑莊重地 寫在學(xué)生的...
    水天一色的美閱讀 448評(píng)論 15 33