ajax實踐(進階12)

題目1: ajax 是什么洼畅?有什么作用?

  • ajax(Asynchronous JavaScript and XML)棚赔,這一技術(shù)能夠向服務(wù)器請求額外的數(shù)據(jù)而無需卸載整個頁面帝簇∨枪可以實現(xiàn)異步,這里的異步是指脫離當(dāng)前瀏覽器頁面的請求己儒、加載等單獨執(zhí)行崎岂,這意味著可以在不重新加載整個網(wǎng)頁的情況下,通過JavaScript發(fā)送請求闪湾、接受服務(wù)器傳來的數(shù)據(jù)冲甘,然后操作DOM將新數(shù)據(jù)對網(wǎng)頁的某部分進行更新。
  • 異步請求途样,不需要像表單提交請求一樣阻塞頁面(同步請求會造成頁面卡死等情況)江醇。異步會帶來良好的用戶體驗。

題目2: 前后端開發(fā)聯(lián)調(diào)需要注意哪些事情何暇?后端接口完成前如何 mock 數(shù)據(jù)陶夜?

  • 需要在開發(fā)前達成對接口的約定(一般是文檔),決定url(和方法名)裆站,參數(shù)名(和參數(shù)值格式)条辟,返回數(shù)據(jù)格式
  • mock數(shù)據(jù):
    • 可以根據(jù)接口文檔,使用假數(shù)據(jù)來驗證我們制作的頁面響應(yīng)和接口是否正常宏胯。
    • 使用server-mock羽嫡,簡單使用步驟如下:
      1. npm install -g server-mock:在全局中安裝server-mock
      2. mock init:生成3個mock文件(index.html,router.js,user.ejs)
      3. mock start:開啟服務(wù)器

題目3:點擊按鈕,使用 ajax 獲取數(shù)據(jù)肩袍,如何在數(shù)據(jù)到來之前防止重復(fù)點擊?

點擊按鈕后杭棵,設(shè)置狀態(tài)變量,直到請求結(jié)束(readyState===4時)重置狀態(tài)變量讓后面的請求代碼可以執(zhí)行氛赐。

let isLoading = false;//狀態(tài)變量:用于在數(shù)據(jù)到來之前防止重復(fù)點擊
btnNode.addEventListener('click', () => {
    if(isLoading) return;//正在加載則終止
    let text = textNode.value;
    let xhr = new XMLHttpRequest();
    xhr.open('get', '/test?text=' + text, true);
    xhr.send();
    xhr.onreadystatechange = () => {
        if (xhr.readyState === 4 && xhr.status === 200) {
            let content = xhr.responseText;
            console.log(content);
            contentNode.innerText = content;
            isLoading = false;//加載成功則重置狀態(tài)變量
        }
    }
    isLoading = true;//加載開始時改變狀態(tài)變量的值
});

題目4:封裝一個 ajax 函數(shù)魂爪,能通過如下方式調(diào)用。后端在本地使用server-mock來 mock 數(shù)據(jù)

//I defined a method: convert from obj to url-parameters
const convert=(obj)=>{
    let arr = [];
    for(let [key,value] of Object.entries(obj)) {
        arr.push(key+"="+value);
    }
    return arr.join('&');
}
function ajax(opts){
    // todo ...
    let xhr = new XMLHttpRequest();
    if(opts.type==='get'){
        xhr.open(opts.type, opts.url+'?'+convert(opts.data), true);
        xhr.send();
    } else if(opts.type === 'post'){
        xhr.open(opts.type, opts.url, true);
        xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xhr.send(convert(opts.data));
    }
    xhr.onreadystatechange = ()=>{
        if(xhr.readyState===4&&xhr.status===200){
            let res = xhr.responseText;
            console.log(res);
            opts.success(res);
        }else if(xhr.readyState===4){
            opts.error();
        }
    }
}
document.querySelector('#btn').addEventListener('click', function(){
    ajax({
        url: '/login',   //接口地址
        type: 'get',               // 類型艰管, post 或者 get,
        data: {
            username: 'xiaoming',
            password: 'abcd1234'
        },
        success: function(ret){
            console.log(ret);       // {status: 0}
        },
        error: function(){
           console.log('出錯了')
        }
    })
});

題目5:實現(xiàn)加載更多的功能滓侍,效果范例19,后端在本地使用server-mock來模擬數(shù)據(jù)

代碼鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蛙婴,一起剝皮案震驚了整個濱河市粗井,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌街图,老刑警劉巖浇衬,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異餐济,居然都是意外死亡耘擂,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門絮姆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來醉冤,“玉大人秩霍,你說我怎么就攤上這事∫涎簦” “怎么了铃绒?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長螺捐。 經(jīng)常有香客問我颠悬,道長,這世上最難降的妖魔是什么定血? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任赔癌,我火速辦了婚禮,結(jié)果婚禮上澜沟,老公的妹妹穿的比我還像新娘灾票。我一直安慰自己,他們只是感情好茫虽,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布刊苍。 她就那樣靜靜地躺著,像睡著了一般濒析。 火紅的嫁衣襯著肌膚如雪班缰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天悼枢,我揣著相機與錄音,去河邊找鬼脾拆。 笑死馒索,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的名船。 我是一名探鬼主播绰上,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼渠驼!你這毒婦竟也來了蜈块?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤迷扇,失蹤者是張志新(化名)和其女友劉穎百揭,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜓席,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡器一,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了厨内。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片祈秕。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡渺贤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出请毛,到底是詐尸還是另有隱情志鞍,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布方仿,位于F島的核電站固棚,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏兼丰。R本人自食惡果不足惜玻孟,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鳍征。 院中可真熱鬧黍翎,春花似錦、人聲如沸艳丛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽氮双。三九已至碰酝,卻和暖如春全庸,著一層夾襖步出監(jiān)牢的瞬間纷宇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工顷编, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留暖释,地道東北人袭厂。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像球匕,于是被迫代替她去往敵國和親纹磺。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,528評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理亮曹,服務(wù)發(fā)現(xiàn)橄杨,斷路器,智...
    卡卡羅2017閱讀 134,601評論 18 139
  • 1- 關(guān)于 ajax 及其作用 Ajax是Asynchronous JavaScript and XML的縮寫照卦。...
    osborne閱讀 529評論 0 0
  • 7.3.2 PHP畫圖理解對象在內(nèi)存中的形式 當(dāng)定義好類后式矫,我們使用new關(guān)鍵字來生成一個對象。$對象名稱 = n...
    曹淵說創(chuàng)業(yè)閱讀 638評論 0 0
  • 高三那年我們在辦公樓偶遇役耕,都是為了調(diào)宿舍的事衷佃,后來校方安排我倆住一起。 上課鈴響了以后她上了二樓我下了...
    木兮日記閱讀 150評論 0 0