1. 程式人生 > >前端知識-原生Ajax理解

前端知識-原生Ajax理解

前言: 這兩天在做一個人日記網站,基於前端+Servlet+JSP+JavaBean+tomcat+mysql實現,由於之前的實踐很少碰到前端內容,這次自己搞也是邊學邊弄,到了js這塊,必不可少的就是Ajax技術,博主花了一些時間去學習了一下,並做點總結。


什麼是Ajax:
簡單地說,如果你訪問一個沒有用到Ajax技術的網頁,通常你點一下按鈕就要重新整理一下頁面,儘管新頁面上只有一行字和當前頁面不一樣,但你還是要無聊地等待頁面重新整理。用了AJAX之後,你點選,然後頁面上的一行字就變化了,頁面本身不用重新整理。
Ajax的應用:
百度搜索提示,淘寶新會員註冊時使用者名稱驗證,級聯下拉列表,顯示進度條......


補充一下下面的內容(摘錄自知乎):
ajax的全稱是AsynchronousJavascript+XML。
非同步傳輸+js+xml。
所謂非同步,在這裡簡單地解釋就是:向伺服器傳送請求的時候,我們不必等待結果,而是可以同時做其他的事情,等到有了結果我們可以再來處理這個事。(當然,在其他語境下這個解釋可能就不對了)
這個很重要,如果不是這樣的話,我們點完按鈕,頁面就會死在那裡,其他的資料請求不會往下走了。這樣比等待重新整理似乎更加討厭。
(雖然提供非同步通訊功能的元件預設情況下都是非同步的,但它們也提供了同步選項,如果你好奇把那個選項改為false的話,你的頁面就會死在那裡)
xml只是一種資料格式,在這件事裡並不重要,我們在更新一行字的時候理論上說不需要這個格式,但如果我們更新很多內容,那麼格式化的資料可以使我們有條理地去實現更新。




其實在博主的腦袋裡,Ajax就是一個超級有用的XMLHttpRequest物件啦,ajax就可以讓js讀取伺服器上的資料。
那麼首先你要創建出這個物件了咯,一般來說,Ajax的使用就像打電話一樣分為四步:
1.你得有個手機。
2.撥號。
3.你開始說話balabala。。。
4.聽別人說。。。。


那麼Ajax:
1.建立Ajax物件。
2.連線到伺服器。
3.傳送請求。
 4.接受返回值。


1.建立Ajax物件。
if (window.XMLHttpRequest) { // Mozilla……等非IE瀏覽器
var oAjax = new XMLHttpRequest(); // 建立XMLHttpRequest物件
} else if (window.ActiveXObject) { // IE瀏覽器
try {
var oAjax = new ActiveXObject("Msxml2.XMLHTTP"); // 建立XMLHttpRequest物件
} catch (e) {
try {
var oAjax = new ActiveXObject("Microsoft.XMLHTTP"); // 建立XMLHttpRequest物件
} catch (e) {
}
}
}
    每個瀏覽器對Ajax的支援是不同的,建立的方式也不同,以上判斷程式碼就展示了在IE瀏覽器和非IE瀏覽器環境下用各自不同的方式建立XMLHttpRequest物件。
這裡要注意一下js的一個特性,在使用判斷時必須使用window.XMLHttpRequest而不能使用XMLHttpRquest,在js中用沒有定義的變數會報錯,使用沒有定義的屬性不會報錯,而是僅僅給你一個undefined提示,在IE6瀏覽器下,XMLHttpRequest是沒有定義的,考慮到相容性問題,必須使用window.XMLHttpRequest來充當判斷條件,這時瀏覽器就把它當window的一個屬性,返回undefined而非報錯,這就是我們需要的。


2.連線到伺服器。
oAjax.open();
open()有三個引數,第一個引數為傳送方式,值為POST,GET
第二個引數為你要訪問的檔案的url。
第三個為 值為true 或者 false ,true代表採用非同步傳輸方式連線伺服器。


3.傳送請求
oAjax.send();


4 .接受返回值。
funtion getResult(){
if(oAjax.readyState==4){
      if(oAjax.status==200){
                            alert(oAjax.reponseText);
                            }else{alert("訪問失敗");}
}


}
readyState的值所代表的狀態:
0:請求未初始化(還沒有呼叫 open())。
1:請求已經建立,但是還沒有傳送(還沒有呼叫 send())。
2:請求已傳送,正在處理中(通常現在可以從響應中獲取內容頭)。
3:請求在處理中;通常響應中已有部分資料可用了,但是伺服器還沒有完成響應的生成。
4:響應已完成;您可以獲取並使用伺服器的響應了。
       status的值所代表的狀態(最常見的5種):
       1.200表示成功
       2.202表示請求被接受,但尚未成功
       3.400錯誤的請求
       4.404檔案未找到
       5.500內部伺服器錯誤










四部曲完成了,為了提高的程式碼重用性,可以將程式碼封裝到一個.js檔案中,程式碼:
var net = new Object(); // 定義一個全域性變數net
// 編寫建構函式
net.AjaxRequest = function(url, onload, onerror, method, params) {
this.req = null;
this.onload = onload;
this.onerror = (onerror) ? onerror : this.defaultError;
this.loadDate(url, method, params);
}
// 編寫用於初始化XMLHttpRequest物件並指定處理函式,最後傳送HTTP請求的方法
net.AjaxRequest.prototype.loadDate = function(url, method, params) {
if (!method) { // 設定預設為的請求方式為GET
method = "GET";
}
if (window.XMLHttpRequest) { // Mozilla……等非IE瀏覽器
this.req = new XMLHttpRequest(); // 建立XMLHttpRequest物件
} else if (window.ActiveXObject) { // IE瀏覽器
try {
this.req = new ActiveXObject("Msxml2.XMLHTTP"); // 建立XMLHttpRequest物件
} catch (e) {
try {
this.req = new ActiveXObject("Microsoft.XMLHTTP"); // 建立XMLHttpRequest物件
} catch (e) {
}
}
}
if (this.req) {
try {
var loader = this;
// 指定回撥函式
this.req.onreadystatechange = function() {
net.AjaxRequest.onReadyState.call(loader);
}
this.req.open(method, url, true); // 建立與伺服器的連線
if (method == "POST") { // 當傳送POST請求時,設定請求頭
this.req.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");
}
this.req.send(params); // 向伺服器傳送請求
} catch (err) {
this.onerror.call(this); // 呼叫錯誤處理函式
}
}
}


// 重構回撥函式
net.AjaxRequest.onReadyState = function() {
var req = this.req;
var ready = req.readyState; // 獲取請求狀態
if (ready == 4) {
if (req.status == 200) {
this.onload.call(this); // 呼叫回撥函式
} else {
this.onerror.call(this); // 呼叫錯誤處理函式
}
}
}
// 重構預設的錯誤處理函式
net.AjaxRequest.prototype.defaultError = function() {
alert("錯誤資料\n\n回撥狀態:" + this.req.readyState + "\n狀態: " + this.req.status);
}

相關推薦

前端知識-原生Ajax理解

前言: 這兩天在做一個人日記網站,基於前端+Servlet+JSP+JavaBean+tomcat+mysql實現,由於之前的實踐很少碰到前端內容,這次自己搞也是邊學邊弄,到了js這塊,必不可少的就是Ajax技術,博主花了一些時間去學習了一下,並做點總結。 什麼是Ajax:

寫給自己,梳理一下我現在對前端知識結構的理解

今天想著做一件事情,給自己的收藏夾分類。結果做著做著,發現這個任務的工作量超乎我的想象。有一些文章,可能很難界定說,它是哪一類的;而且自己還沒有特別去梳理自己對前端知識結構的理解,使得在分類的時候層級也有些模糊。所以在這裡梳理一下自己理解中的知識結構。 這既是一篇總結,

理解ajax技術,封裝原生 ajax請求

// 舉例1:jquery 的 ajax 請求如下 $.ajax({ url: 'http://118.31.238.237:8080/metro/get', //請求地址 type: 'GET',

JAVA EE 專案常用知識AJAX技術實現select下拉列表聯動的兩種用法(讓你真正理解ajax

ajax 下拉列表聯動的用法。 ajax的定義: AJAX 是一種用於建立快速動態網頁的技術。 通過在後臺與伺服器進行少量資料交換,AJAX 可以使網頁實現非同步更新。這意味著可以在不重新載入整個網頁的情況下,對網頁的某部分進行更新。 ajax效果的一個例子: 區域為

理解原生AJAX:純JS仿jQueryAjax

jQuery其實用的稀裡糊塗的,原生JavaScript其實也很有趣的。搞一個原生的Ajax封裝大概下午到晚上。參考了網上很多大佬的部落格,坑坑中過來的。 $(function(){ //開始 function baseAjax(options)

ajax理解原生封裝

onreadystatechange 事件 當請求被髮送到伺服器時,我們需要執行一些基於響應的任務。 每當 readyState 改變時,就會觸發 onreadystatechange 事件。 readyState 屬性存有 XMLHttpRequest 的狀態資

前端知識圖譜

per sta ron 函數式 焦點圖 not mozilla 結構 nds 綜合類 前端知識體系 前端知識結構 Web前端開發大系概覽 Web前端開發大系概覽-中文版 Web Front-end Stack v2.2 免費的編程中文書籍索引 前端書籍 前端免費書籍大

原生Ajax總結

ajaxHTTP協議傳統的請求和Ajax請求Ajax定義Asynchronous JavaScript and XML. Ajax異步的,JavaScript程序希望與服務器直接通信而不需要重新加載頁面。Ajax基本流程1.創建請求對象function requestObject(){

瀑布流原生ajax,demo

一次 creat onscroll window 目錄 數據 ron oat lose   最近聽朋友們說起瀑布流挺多的,自己就去研究下了,一個簡單的原生demo,分享給大家...   簡單分為三個文檔,有詳細的註釋:img;ajax.php;demo.php     其中

django基礎知識Ajax:

append 進行 mes migration sta return t對象 temp 模型 使用Ajax 使用視圖通過上下文向模板中傳遞數據,需要先加載完成模板的靜態頁面,再執行模型代碼,生成最張的html,返回給瀏覽器,這個過程將頁面與數據集成到了一起,擴展性差 改進

Web前端知識體系精簡

以及 opera 詳解 css屬性 動態設置 等號 互聯 簡單 request   Web前端技術由html、css和javascript三大部分構成,是一個龐大而復雜的技術體系,其復雜程度不低於任何一門後端語言。而我們在學習它的時候往往是先從某一個點切入,然後不斷地接觸和

Web 前端知識體系精簡

flex布局 構造函數 項目 全局變量 src 描述 time xpl 解析 Web前端技術由html、css和javascript三大部分構成,是一個龐大而復雜的技術體系,其復雜程度不低於任何一門後端語言。而我們在學習它的時候往往是先從某一個點切入,然後不斷地接觸和學習新

使用原生AJAX 發送異步請求實現 常用的用戶登錄效果

tor dia post request reat def cat inner -c HTML部分 <!doctype html> <html> <head> <meta charset="UTF-8"> &l

HTML-封裝原生Ajax

failure chan html hang active ready type esp time() function ajax(data){ //data{data:"",dataType:"xml/json",type:"get/post",url:"",a

怎樣開始學習前端知識

雷峰塔 前端 html css 標簽 1,學習Web前端的第一塊學習內容是學習Html知識,Html是基礎。學到最後會發現不光是直接應用html寫網頁,還是通過後臺語言模塊化的生成,都需要html的參與。2.,html已經出h5了,但是鑒於新版本和html4等差別不是那麽明顯,建議可以先從

Web前端知識體系

webWeb前端技術由html、css和javascript三大部分構成,是一個龐大而復雜的技術體系,其復雜程度不低於任何一門後端語言。而我們在學習它的時候往往是先從某一個點切入,然後不斷地接觸和學習新的知識點,因此對於初學者很難理清楚整個體系的脈絡結構。本文將對Web前端知識體系進行簡單的梳理,對應的每個知

web前端知識小筆記(二)

jquery getview 例如 get del tar and 條件語句 arguments 1.if條件語句相關 對於 if 語句括號裏的表達式,ECMAScript 會自動調用 Boolean()轉型函數將這個表達式的結果轉換成一個布爾值。如果值為 true,執行

Js原生Ajax和Jquery的Ajax

fun 一個 表示 post 發的 nco 自動 操作 類型轉換 一、Ajax概述 1.什麽是同步,什麽是異步 同步現象:客戶端發送請求到服務器端,當服務器返回響應之前,客戶端都處於等待卡死狀態 異步現象:客戶端發送請求到服務器端,無論服務器是否返回響應,客戶端都可以隨意做

原生ajax與封裝的ajax使用方法

alt 發出 框架 req 網站 原因 不變 textarea ajax 當我們不會寫後端接口來測試ajax時,我們可以使用node環境來模擬一個後端接口。 1、模擬後端接口可參考http://www.cnblogs.com/heyujun-/p/6793900.html網

前端知識學習——html

submit src 加載 lin mpat xhtml area password title <!-- Html,CSS,JS 三者的關系 ==> 人,衣服,動作。 以下展示 html 常用基本編碼 --><!-- Html 在PyChar