您好,登錄后才能下訂單哦!
小編給大家分享一下Ajax如何實現(xiàn)封裝,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
之前是點擊按鈕取出新聞,現(xiàn)在要實現(xiàn)每隔一段事件進行新聞的更新。這個時候,肯定是加一個定時器,然后每隔一段事件,再進行一次Ajax請求,既然要經(jīng)常用到Ajax請求,封裝函數(shù)就很必要了。
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 ); // 將后臺獲取的內容轉為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; //把內容放在頁面里 } 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ù)中調用success函數(shù)的時候,把xhr.responseText當作參數(shù)傳出去。success(xhr.responseText)。
其實這是一種回調,回調就是一個函數(shù)作為另一個函數(shù)的參數(shù),并在另一個函數(shù)里面被調用,這個栗子就是success作為ajax函數(shù)的參數(shù),并在ajax里面被調用。 (其實個人感覺就是函數(shù)在用參數(shù),函數(shù)的參數(shù),就是拿來用的,只是現(xiàn)在參數(shù)是函數(shù),所以就調用唄)。
所以封裝后就是這樣:
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); } } } }
調用就是這樣
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格式傳參,就方便一些,目前還未總結好,后期補充。
以上是“Ajax如何實現(xiàn)封裝”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。