ajax使用api和CORS以及JSONP(ajax+api)

ajax(Asynchronous JavaScript And XML)

async:異步執(zhí)行
javascript:使用XMLHttpRequest對象
XML:負責(zé)數(shù)據(jù)交換和存儲牌里,現(xiàn)在使用最多的是json
不用刷新和重新加載網(wǎng)頁的情況下,動態(tài)的與服務(wù)器交換數(shù)據(jù)
直接對dom元素進行操作,缺點是不利于seo

總結(jié)下:ajax就是不用重新加載或刷新網(wǎng)頁庐镐,就能和服務(wù)器交換數(shù)據(jù)的一項技術(shù)儡首,這種技術(shù)使用xml或者json作為前后端數(shù)據(jù)交換的載體票顾;

如何使用ajax

創(chuàng)建XMLHttpRequest對象
準備創(chuàng)建連接
發(fā)送請求
處理響應(yīng)

創(chuàng)建

var xhr = new XMLHttpRequest;

建立連接

//如果method是GET桃犬,則url = url?queryString
//queryString是查詢字符串
xhr.open(method,url,async);

發(fā)送請求

//如果method是POST
xhr.setRequetHeader("Content-Type","application/x-www-form-urlencoded");
xhr.send(queryString);//查詢字符串做參數(shù)
//如果method是GET
xhr.send();

處理響應(yīng)

xhr.onreadystatechange = function(){//請求響應(yīng)函數(shù)
  if(readyState === 4){//readyState響應(yīng)狀態(tài)碼1-4恋拍;4表示請求處理完畢
    if(status === 200){//http狀態(tài)碼200表示ok
          //todo....
    }
  }
}

對于ajax函數(shù)的簡單封裝

/**
 * ajax封裝
 * ajax->option{
 *     mothed:"",//以什么方式傳遞數(shù)據(jù)
 *     url:"",//api接口路徑
 *     data:{username:"",password:""},//需要提交的數(shù)據(jù)
 *     returndatatype:"json",//服務(wù)器返回的數(shù)據(jù)格式
 *     success:function(data){},//請求成功之后執(zhí)行的函數(shù)
 *     error:function(err){}//請求失敗執(zhí)行的函數(shù)
 * }
 */ 
 function ajax(option){
    option = option || {};//判斷有沒有傳遞參數(shù)隧土,如果沒有提针,那就置空;
    var url = option.url;
    if(!url) return ;//如果沒有傳遞url那就直接結(jié)束程序曹傀;
    var mothed = (option.mothed||"get").toUpperCase();//如果沒有傳遞mothed辐脖,那就將它設(shè)置為默認get;
    // console.log(mothed);
    var queryString = null;//查詢字符串使用data數(shù)據(jù)拼接;
    if(option.data){//如果傳入data數(shù)據(jù)
        queryString = [];
        for(var index in option.data){//遍歷data,并將data格式化之后存入querystring皆愉;
            queryString.push(index + "=" + option.data[index]);
        }
        // console.log(queryString);
        queryString = queryString.join("&");//將數(shù)組元素用&拼接
        // console.log(queryString);
    }
    if(mothed === "GET" && queryString){//如果mothed的方法為get并且查詢字符串不是空嗜价,那么對URL進行拼接
        url += "?" + queryString;
        queryString = null ;//因為url已經(jīng)存儲querystring的值,所以將它清空幕庐;
    }
    // --------------
    //創(chuàng)建ajax對象
    var xhr = new XMLHttpRequest();
    //打開連接
    xhr.open(mothed,url,true);
    //判斷method是否是POST久锥,如果是執(zhí)行setrequestheader
    if(mothed === "POST"){
        xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    }
    xhr.send(queryString);

    xhr.onreadystatechange = function(){//觸發(fā)請求事件的時候執(zhí)行
        if(xhr.readyState === 4){//請求處理完畢
            if(xhr.status === 200){//狀態(tài)碼為ok,請求成功
                var data = xhr.responseText;//獲取api返回文本
                if(option.returndatatype === "json"){//如果文本是json格式
                    // console.log(data);
                    data = JSON.parse(data);//轉(zhuǎn)為數(shù)組
                    // console.log(data);
                }
                option.success && option.success(data);//如果還存在回調(diào)函數(shù)則執(zhí)行异剥;
            }else{
                option.error && option.error(xhr.status);//如果請求失敗瑟由,執(zhí)行請求出錯函數(shù)
            }
        }
    }
 }

使用ajax對api進行訪問

function sel(attr,boolean){
    if(boolean){
        return document.querySelector(attr);
    }
    return document.querySelectorAll(attr);
}
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Page Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<style>
    .bigbox{
        width: 970px;
        margin: 0 auto;
        position: relative;
        margin: 0 auto;
    }
    .bigbox div{
        width: 300px;
        border: 1px solid #eee;
        border-radius: 5px;
        position: absolute;
        left: 0px;
        right: 0px;
        text-align: center;
    }
    .bigbox div img{
        width: 300px;

    }
</style>
<body>
    <div class="bigbox">

    </div>
</body>
<script src="ajax.js"></script>
<script>
    var url = "http://route.showapi.com/819-1?showapi_appid=58891&showapi_sign=6436340432ff47a38a91ed481d090541&type=36&num=50&page=1";
    var html = "";
    var div_ = sel(".bigbox",true);
    ajax({
        url:url,
        mothed:"GET",
        returndatatype:"json",
        success:function(data){
            var data_ = data.showapi_res_body;
            for (var attr in data_) {
                var data_attr = data_[attr];
                if(data_attr){
                    html += `<div>
                    <p>${data_attr.title}</p>
                    <a href="${data_attr.url}"><img src="${data_attr.thumb}"></a>
                    </div>`
                }
            }
            div_.innerHTML = html;
        }
    });
    setTimeout(function() {
            // 待定位元素
            var divs = sel(".bigbox div",false);
            // 盒子個數(shù)
            console.log(divs)
            var len = divs.length;
            // 列寬度
            var colWidth = divs[0].offsetWidth;
            // 水平間距
            var spacing = 20;
            // 列高度數(shù)組
            var height = [0, 0, 0];

            // 最短列定位
            for (var i = 0; i < len; i++) {
                // 當(dāng)前定位元素在其行中的列索引
                var colIndex = minIndex(height);
                // 定位
                divs[i].style.left = colIndex * colWidth + (colIndex + 1) * spacing + "px";
                divs[i].style.top = height[colIndex] + 10 + "px";
                // 將當(dāng)前定位元素的高度及間距累加到列總高度中
                height[colIndex] += divs[i].offsetHeight + 10;
            }

        function minIndex(array) {
            // 假定第一個元素最小,記錄下標
            var min = array[0], index = 0;
            // 循環(huán)判斷
            for (var i = 1; i < array.length; i++) {
                if (min > array[i]) {
                    min = array[i];
                    index = i;
                }
            }
            // 返回下標
            return index;
        }
    },1000)
</script>
</html>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末冤寿,一起剝皮案震驚了整個濱河市歹苦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌督怜,老刑警劉巖殴瘦,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異号杠,居然都是意外死亡蚪腋,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門姨蟋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辣吃,“玉大人,你說我怎么就攤上這事芬探∩竦茫” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵偷仿,是天一觀的道長宵蕉。 經(jīng)常有香客問我,道長节榜,這世上最難降的妖魔是什么羡玛? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮宗苍,結(jié)果婚禮上稼稿,老公的妹妹穿的比我還像新娘。我一直安慰自己讳窟,他們只是感情好让歼,可當(dāng)我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著丽啡,像睡著了一般谋右。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上补箍,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天改执,我揣著相機與錄音,去河邊找鬼坑雅。 笑死辈挂,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的裹粤。 我是一名探鬼主播呢岗,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蛹尝!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起悉尾,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤突那,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后构眯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體愕难,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年惫霸,在試婚紗的時候發(fā)現(xiàn)自己被綠了猫缭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡壹店,死狀恐怖猜丹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情硅卢,我是刑警寧澤射窒,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布藏杖,位于F島的核電站,受9級特大地震影響脉顿,放射性物質(zhì)發(fā)生泄漏蝌麸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一艾疟、第九天 我趴在偏房一處隱蔽的房頂上張望来吩。 院中可真熱鬧,春花似錦蔽莱、人聲如沸弟疆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽兽间。三九已至,卻和暖如春正塌,著一層夾襖步出監(jiān)牢的瞬間嘀略,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工乓诽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留帜羊,地道東北人。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓鸠天,卻偏偏與公主長得像讼育,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子稠集,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,629評論 2 354

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

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5奶段? 答:HTML5是最新的HTML標準。 注意:講述HT...
    kismetajun閱讀 27,474評論 1 45
  • AJAX 原生js操作ajax 1.創(chuàng)建XMLHttpRequest對象 var xhr = new XMLHtt...
    碧玉含香閱讀 3,196評論 0 7
  • 人養(yǎng)成一個習(xí)慣只需要21天,讀到這條信息后晦鞋,我覺得這是上天給我重新做人的機會蹲缠。 一切將是一個新開始。最近經(jīng)過傳統(tǒng)文...
    可以改變閱讀 312評論 0 0
  • 那片天空下過雨 因為你曾經(jīng)來過
    日月之明angel閱讀 144評論 4 1
  • 小鴨子掉進了坑里悠垛,在喊救命线定,這時小兔子和小貓咪聽見了,它們及時跑到坑的旁邊确买,小鴨子說:你們快救救我吧斤讥,我自...
    無人機駕駛閱讀 258評論 0 0