簡書文章發(fā)表測試

Tables Are Cool
col 3 is right-aligned $1600
col 2 is centered $12
zebra stripes are neat $1
1 (21).jpg

AJAX介紹

今天學(xué)習(xí)了一下ajax特此記錄一下灌诅,先放兩參考鏈接

  1. https://blog.csdn.net/weixin_39194176/article/details/80933777
  2. https://blog.csdn.net/c__dreamer/article/details/80456565
  • Ajax 不是一種新的編程語言糠悯,而是一種用于創(chuàng)建更好更快以及交互性更強(qiáng)的Web應(yīng)用程序的技術(shù)趣些。
  • Ajax 通過在后臺與服務(wù)器進(jìn)行少量數(shù)據(jù)交換,Ajax可以使網(wǎng)頁實(shí)現(xiàn)異步更新剧浸。這意味著可以在不重新加載整個網(wǎng)頁的情況下画机,對網(wǎng)頁的某部分進(jìn)行更新焊刹。
  • 傳統(tǒng)的網(wǎng)頁(不使用 Ajax)如果需要更新內(nèi)容系任,必需重載整個網(wǎng)頁面。

ajax的實(shí)現(xiàn)步驟

  1. 創(chuàng)建XMLHTTPRequest對象(異步調(diào)用對象)
  2. 創(chuàng)建一個新的HTTP請求虐块,并指定該HTTP請求的方法俩滥、URL及驗(yàn)證信息
  3. 設(shè)置相應(yīng)HTTP請求狀態(tài)變化的函數(shù)
  4. 發(fā)送HTTP請求.
  5. 獲取異步調(diào)用返回的數(shù)據(jù).
  6. 使用JavaScript和DOM實(shí)現(xiàn)局部刷新.

創(chuàng)建XMLHttpRequest對象

var xmlHttp;
    if(window.XMLHttpRequest){
        xmlHttp = new XMLHttpRequest;
    }else{
        // 在IE5、IE6之前使用的是 ActiveXObject
        xmlHttp = new ActiveXObject('Microsoft.XMLHTTP');
    }

向服務(wù)器發(fā)送請求

xmlHttp.open('get', 'deom_get.json', 'true');
xmlHttp.send();
  1. 連接服務(wù)器
  • 上面創(chuàng)建的ajax對象xhr贺奠,使用xhr.open("請求方式(GET/POST)"霜旧,url路徑,“異步/同步”)儡率。
  • 第三個參數(shù):true===》異步挂据、false===》同步。
  • 當(dāng)請求方式為POST的時候儿普,代碼寫法如上崎逃;
  • 當(dāng)請求方式為GET的時候,使用xhr.open("請求方式(GET/POST)"眉孩,url路徑 + “个绍?”請求數(shù)據(jù) + ,“異步/同步”)浪汪。
  1. 發(fā)送請求
  • 使用xhr.send()發(fā)送請求
  • 當(dāng)請求方式為GET的時候巴柿,發(fā)送請求為xhr.send(null).
  • 當(dāng)請求方式為POST的時候,發(fā)送請求為xhr.send(請求數(shù)據(jù))死遭。
  • 此外使用POST的時候必須在xhr.send(請求數(shù)據(jù))上面添加
    xmlHttp.open('post', 'deom_get.json', 'true');
    xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xmlHttp.send('username=ayf&pwd=123456');

響應(yīng)處理

使用ajax會使用一個事件readystatechange事件:當(dāng)請求被發(fā)送到服務(wù)器時篮洁,我們需要執(zhí)行一些基于響應(yīng)的操作。

  • 當(dāng)readystate改變的時候殃姓,就會觸發(fā)這個事件執(zhí)行。
  • readyState:請求的狀態(tài)瓦阐,返回的是狀態(tài)碼(0 - 4):0(未初始化)open還沒有調(diào)用蜗侈、1(載入)已經(jīng)調(diào)用了send()正在發(fā)送請求、2(載入完成)send方法已經(jīng)完成 已經(jīng)收到了全部的響應(yīng)內(nèi)容睡蟋、3(解析)正在解析響應(yīng)內(nèi)容踏幻、4(完成)響應(yīng)內(nèi)容解析完成 可以在客戶端用了。
  • status:返回請求的結(jié)果碼:返回200(成功)戳杀、返回404(未找到)该面、返回5**(5開頭)(服務(wù)器錯誤)
  • responseText 獲得字符串形式的響應(yīng)數(shù)據(jù)夭苗。
  • responseXML 獲得XML 形式的響應(yīng)數(shù)據(jù)。
xmlHttp.onreadystatechange = function() {
    if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
        //請求成功后的操作 這里只打印獲取到的數(shù)據(jù)
        console.log(JSON.parse(xmlHttp.responseText));
    } else if (xmlHttp.status == 404) {
        console.log('找不到頁面');
    }
}

一個簡單的Ajax

// 原生js實(shí)現(xiàn) ajax        
function ajax() {
    var xmlHttp;
    if (window.XMLHttpRequest) {
        xmlHttp = new XMLHttpRequest;
    } else {
        // 在IE5隔缀、IE6之前使用的是 ActiveXObject
        xmlHttp = new ActiveXObject('Microsoft.XMLHTTP');
    }
    // get請求 demo_get.json 中隨便寫一點(diǎn)json數(shù)據(jù) true表示異步請求
    xmlHttp.open('get', 'demo_get.json', 'true');
    xmlHttp.send();
    xmlHttp.onreadystatechange = function() {
        if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
            //請求成功后的操作 這里只打印獲取到的數(shù)據(jù)
            console.log(JSON.parse(xmlHttp.responseText));
        } else if (xmlHttp.status == 404) {
            console.log('找不到頁面');
        }
    }
}

Ajax封裝 有點(diǎn)jq中ajax的感覺了

function ajax(obj) {
    if (Object.prototype.toString.call(obj) != '[object Object]') {
        console.log('錯誤使用');
    }
    // 可以默認(rèn)部分參數(shù)
    obj.type = obj.type || 'get';
    obj.async = obj.async || 'true';
    // 獲取data中的數(shù)據(jù) 這里data必須是一個{};
    if (obj.data && Object.prototype.toString.call(obj) == '[object Object]') {
        var param = '';
        /*下面注釋是我一開始能想到的方法*/
        // for (const key in obj.data) {
        //     if (obj.data.hasOwnProperty(key)) {
        //         param += `${key}=${obj.data[key]}&`;
        //     }
        // }
        // 去掉最后兩個 &
        // param = param.slice(0, param.length - 2);

        /*這是鏈接中'別人家的代碼' 別人家的就是優(yōu)秀*/
        param = formsParams(obj.data);

        function formsParams(data) {
            var arr = [];
            for (var prop in data) {
                arr.push(prop + "=" + data[prop]);
            }
            /*
            join 是Array原型上面的方法题造;
            join() 方法將一個數(shù)組(或一個類數(shù)組對象)的所有元素連接成一個字符串并返回這個字符串。
            如果數(shù)組只有一個項(xiàng)目猾瘸,那么將返回該項(xiàng)目而不使用分隔符界赔。
            */
            return arr.join("&");
        }

        var xmlHttp;
        xmlHttp = window.XMLHttpRequest ? new XMLHttpRequest : new ActiveXObject('Microsoft.XMLHTTP');
        // 不區(qū)分大小寫
        var ignoreCaseGet = /get/i;
        var ignoreCasePost = /post/i;
        if (ignoreCaseGet.test(obj.type)) { //get 請求方式
            obj.url = obj.url + `?${param}`;
            xmlHttp.open(obj.type, obj.url, obj.async);
            xmlHttp.send();
        } else if (ignoreCasePost.test(obj.type)) { //post請求方式
            xmlHttp.open(obj.type, obj.url, obj.async);
            xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            xmlHttp.send(param);
        }
        xmlHttp.onreadystatechange = function() {
            if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
                obj.success(xmlHttp.responseText);
            } else {
                obj.error();//這個有點(diǎn)假的 以后再搞
            }
        }
    }
}

var obj = {
    url: 'demo_get.json',
    data: {
        username: 'ayf',
        pwd: '123456'
    },
    success: function(res) {
        console.log(res);
    },
    error: function() {
        console.log('網(wǎng)絡(luò)錯誤');
    }
}
ajax(obj)

使用promise來封裝ajax(等學(xué)會了promise再來)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市牵触,隨后出現(xiàn)的幾起案子淮悼,更是在濱河造成了極大的恐慌,老刑警劉巖揽思,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件袜腥,死亡現(xiàn)場離奇詭異,居然都是意外死亡钉汗,警方通過查閱死者的電腦和手機(jī)羹令,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來儡湾,“玉大人特恬,你說我怎么就攤上這事⌒炷疲” “怎么了癌刽?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長尝丐。 經(jīng)常有香客問我显拜,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任瓷胧,我火速辦了婚禮亚铁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘譬淳。我一直安慰自己,他們只是感情好盹兢,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布邻梆。 她就那樣靜靜地躺著,像睡著了一般绎秒。 火紅的嫁衣襯著肌膚如雪浦妄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天,我揣著相機(jī)與錄音剂娄,去河邊找鬼蠢涝。 笑死,一個胖子當(dāng)著我的面吹牛阅懦,可吹牛的內(nèi)容都是我干的和二。 我是一名探鬼主播,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼故黑,長吁一口氣:“原來是場噩夢啊……” “哼儿咱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起场晶,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤混埠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后诗轻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钳宪,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年扳炬,在試婚紗的時候發(fā)現(xiàn)自己被綠了吏颖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡恨樟,死狀恐怖半醉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情劝术,我是刑警寧澤缩多,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站养晋,受9級特大地震影響衬吆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜绳泉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一逊抡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧零酪,春花似錦冒嫡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蛔琅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背罗售。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工辜窑, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人寨躁。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓穆碎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親职恳。 傳聞我的和親對象是個殘疾皇子所禀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評論 2 355

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