通用ajax要求方法封裝,相容主流瀏覽器,ajax主流
ajax簡介
沒有AJAX會怎麼樣?普通的ASP.Net每次執行服務端方法的時候都要重新整理當前頁面。如果沒有AJAX,在youku看視頻的過程中如果點擊了“頂、踩”、評論、評論翻頁,頁面就會重新整理,視頻就會被打斷。開發一個看效果:用<video src="diaosi.mp4" autoplay controls></video>播放視頻(只有支援html5的瀏覽器能播放),然後放一個“贊”按鈕的功能(贊的數量存到資料庫),看沒有ajax會打斷視頻,看優酷則不會。
AJAX是一種進行頁面局部非同步重新整理的技術。用AJAX向伺服器發送請求和獲得伺服器返回的資料並且更新到介面中,不是整個頁面重新整理,而是在HTML頁面中使用JavaScript建立XMLHTTPRequest對象來向伺服器發出請求以及獲得返回的資料,就像JavaScript版的WebClient一樣,在頁面中由XMLHTTPRequest來發出Http請求和獲得伺服器的返回資料,這樣頁面就不會重新整理了。XMLHTTPRequest是AJAX的核心對象
有些重複的東西,我們不希望每次使用的時候都自己手動再去重新寫一遍,或者重新複製一遍,這時,我就需要對代碼進行封裝。方法封裝的原則:把不變的代碼封裝起來,把變的東西作為參數傳遞過去。
//url:ajax請求地址帶需要傳遞的參數,onsuccess:請求成功後執行的js方法function ajax(url, onsuccess){ var xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP'); //建立XMLHTTP對象,考慮相容性。XHR xmlhttp.open("POST", url, true); //“準備”向伺服器的GetDate1.ashx發出Post請求(GET可能會有緩衝問題)。這裡還沒有發出請求 //DRY:不要複製粘貼代碼 //AJAX是非同步,並不是等到伺服器端返回才繼續執行 xmlhttp.onreadystatechange = function () { if (xmlhttp.readyState == 4) //readyState == 4 表示伺服器返回完成資料了。之前可能會經曆2(請求已發送,正在處理中)、3(響應中已有部分資料可用了,但是伺服器還沒有完成響應的產生) { if (xmlhttp.status == 200) //如果Http狀態代碼為200則是成功 { onsuccess(xmlhttp.responseText); } else { alert("AJAX伺服器返回錯誤!"); } } } //不要以為if (xmlhttp.readyState == 4) {在send之前執行!!!! xmlhttp.send(); //這時才開始發送請求。並不等於伺服器端返回。請求發出去了,我不等!去監聽onreadystatechange吧!}