最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Ajax基礎教程之封裝(三)

 更新時間:2016年06月22日 14:39:30   作者:沫晴的前端世界  
這篇文章給大家介紹ajax基礎教程之封裝的知識,本文通過實例給大家詳細介紹,非常不錯,感興趣的朋友一起學習吧

在上篇文章給大家介紹了Ajax基礎詳解教程(一)    Ajax基礎詳解教程(二)

今天接著我們上篇博文的栗子,現(xiàn)在我來擴大一下需求,之前是點擊按鈕取出新聞,現(xiàn)在要實現(xiàn)每隔一段事件進行新聞的更新。這個時候,肯定是加一個定時器,然后每隔一段事件,再進行一次Ajax請求,既然要經(jīng)常用到Ajax請求,封裝函數(shù)就很必要了,先來看一下上個栗子的js代碼,我們來進行封裝。

window.onload = function() {
var oBtn = document.getElementById('btn'); 
oBtn.onclick = function() {
var xhr = null;
if(window.XMLHttpRequest){
xhr = new XMLHttpRequest();
}else{
xhr = new ActiveXObject('Microsoft.XMLHTTP');
} 
xhr.open('get','getNews.php',true);
xhr.send();
xhr.onreadystatechange = function() {
if ( xhr.readyState == 4 ) {
if ( xhr.status == 200 ) { //紅色標識為成功后執(zhí)行的任務
var data = JSON.parse( xhr.responseText ); // 將后臺獲取的內(nèi)容轉(zhuǎn)為json類型 每一個json里面有兩個鍵:title和date
var oUl = document.getElementById('ul1'); // 獲取顯示新聞列表的節(jié)點
var html = '';
for (var i=0; i<data.length; i++) { // 循環(huán)所有的json數(shù)據(jù),并把每一條添加到列表中
html += '<li><a href="">'+data[i].title+'</a> [<span>'+data[i].date+'</span>]</li>';
}
oUl.innerHTML = html; //把內(nèi)容放在頁面里
} else {
alert('出錯了,Err:' + xhr.status);
}
}
}
}
}
</script> 

封裝函數(shù)的要點就是把重復使用的部分提取取來,同時一些變化的東西作為參數(shù),無法作為參數(shù)的進行判斷處理。

1 所以我們先看看變化的東西都有哪些:1 請求方式是get/post 2 請求的地址 3 請求的數(shù)據(jù) 4 請求成功后需要做的事情

所以這四個就做為函數(shù)的參數(shù):ajax(method,url,data,success);

2 因為不同的請求方式,我們傳數(shù)據(jù)的方式不一樣,所以對于這些,需要進行條件判斷。

3 還有一個問題就是關于 xhr.responseText ,變量xhr是在封裝函數(shù)中聲明的,所以這個東西屬于ajax函數(shù)的,我們在success函數(shù)中是用不到的, 但是success這個函數(shù)里面需要用這個數(shù)據(jù)。所以辦法就是在封裝函數(shù)中調(diào)用success函數(shù)的時候,把xhr.responseText當作參數(shù)傳出去。success(xhr.responseText)。

其實這是一種回調(diào),回調(diào)就是一個函數(shù)作為另一個函數(shù)的參數(shù),并在另一個函數(shù)里面被調(diào)用,這個栗子就是success作為ajax函數(shù)的參數(shù),并在ajax里面被調(diào)用。 (其實個人感覺就是函數(shù)在用參數(shù),函數(shù)的參數(shù),就是拿來用的,只是現(xiàn)在參數(shù)是函數(shù),所以就調(diào)用唄)。

所以封裝后就是這樣:

function ajax(method, url, data, success) {
var xhr = null;
try {
xhr = new XMLHttpRequest();
} catch (e) {
xhr = new ActiveXObject('Microsoft.XMLHTTP');
}
if (method == 'get' && data) {
url += '?' + data;
}
xhr.open(method,url,true);
if (method == 'get') {
xhr.send();
} else {
xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded');
xhr.send(data);
}
xhr.onreadystatechange = function() {
if ( xhr.readyState == 4 ) {
if ( xhr.status == 200 ) {
success && success(xhr.responseText); //如果函數(shù)存在就執(zhí)行后面的 &&的執(zhí)行過程就是前面的是真,才執(zhí)行后面的。
} else {
alert('出錯了,Err:' + xhr.status);
}
}
}
} 

調(diào)用就是這樣

ajax('get','getNews.php','',function(data) {
var data = JSON.parse( data ); 
var oUl = document.getElementById('ul1');
var html = '';
for (var i=0; i<data.length; i++) {
html += '<li><a href="">'+data[i].title+'</a> [<span>'+data[i].date+'</span>]</li>';
}
oUl.innerHTML = html;
}); 

其實這個封裝,還不是那么好,比如上面的data沒有數(shù)據(jù),我們還是得占位,像jquery里面用json格式傳參,就方便一些,目前還未總結(jié)好,后期補充。

相關文章

最新評論

灌阳县| 邵阳县| 东安县| 淮北市| 汝南县| 辽中县| 双辽市| 威信县| 普宁市| 抚顺市| 深圳市| 东台市| 嵩明县| 徐水县| 丘北县| 河曲县| 从化市| 德江县| 塘沽区| 南京市| 马山县| 揭东县| 沂水县| 进贤县| 宜黄县| 浏阳市| 宁化县| 睢宁县| 侯马市| 承德市| 台中市| 贡觉县| 金华市| 沛县| 台南县| 左权县| 枣强县| 贺州市| 平阳县| 合阳县| 栖霞市|