1. 程式人生 > >前端知識點整理系列(一)—— Ajax

前端知識點整理系列(一)—— Ajax

準備找實習了,打算對前端的基礎知識點做一些整理,做為找實習前的準備,這將會是一個系列的文章總結。

今天,我們來談談Ajax

首先來看看Ajax的全稱是什麼? AJAX = Asynchronous JavaScript and XML(非同步的 JavaScript
和 XML)。

Ajax被使用之前,假如我們要更新頁面內容的話,需要重新載入整個的頁面,但Ajax出現後,改變了這個劣勢,我們可以在不重新載入整個網頁的情況下,對網頁的某部分進行更新。現如今,Web開發的過程中,Ajax已經普遍化了,在我們身邊處處可見。例如谷歌,百度的搜尋引擎,當我們在搜尋框輸入查詢的內容時,提示框會實時更新而不需要重新載入網頁,這就是用到了Ajax

技術。
下面整理一下Ajax的工作原理。
Ajax的核心是XMLHttpRequest物件,它是Ajax實現的關鍵——傳送非同步請求,接收響應及執行回撥都是通過它來完成的。

實現Ajax的基本步驟

  1. 建立XMLHttpRequest物件,也就是建立一個非同步呼叫物件.
  2. 建立一個新的HTTP請求,並指定該HTTP請求的方法、URL及驗證資訊.
  3. 設定響應HTTP請求狀態變化的函式.
  4. 傳送HTTP請求.
  5. 獲取非同步呼叫返回的資料.
  6. 使用JavaScript和DOM實現區域性重新整理.

我們先來看看原生javascript的ajax實現。

function
Ajax(){
//宣告一個空物件來裝入XMLHttpRequest物件 var xmlHttpReq = null; //例項化XMLHttpRequest物件 if(window.ActiveXobject){ //IE5.6是以ActiveXobject的方式實現 xmlHttpReq = new ActiveXobject("Microsoft.XMLHTTP"); }else if(window.XMLHttpRequest){ //除IE5,6以外的瀏覽器實現 xmlHttpReq = new XMLHttpRequest(); } //呼叫open()方法並採用非同步方式
xmlHttpReq.open("GET","test.php",true); //將請求傳送到伺服器(post可加入引數string) xmlHttpReq.send(); //請求狀態改變回調 xmlHttpReq.onreadystatechange=function(){ if (xmlHttpReq.readyState==4 && xmlHttpReq.status==200){ document.getElementById("myDiv").innerHTML=xmlHttpReq.responseText; } } }

下表是readyState對應的狀態碼和描述

屬性 描述
onreadystatechange 儲存函式(或函式名),每當 readyState 屬性改變時,就會呼叫該函式。
readyState 0 請求未初始化
readyState 1 伺服器連線已建立
readyState 2 請求已接收
readyState 3 請求處理中
readyState 4 請求已完成,且響應已就緒

再羅列一些http狀態碼吧。

狀態碼 描述
200 OK 一切正常,對GET和POST請求的應答文件跟在後面
301 Moved Permanently 客戶請求的文件在其他地方,新的URL在Location頭中給出,瀏覽器應該自動地訪問新的URL。
302 Found 類似於301,但新的URL應該被視為臨時性的替代,而不是永久性的。
304 Not Modified 客戶端有緩衝的文件併發出了一個條件性的請求(一般是提供If-Modified-Since頭表示客戶只想比指定日期更新的文件)。伺服器告訴客戶,原來緩衝的文件還可以繼續使用。
400 Bad Request 請求出現語法錯誤。
403 Forbidden 資源不可用。
404 Not Found 無法找到指定位置的資源
500 Internal Server Error 伺服器遇到了意料不到的情況,不能完成客戶的請求
501 Not Implemented 伺服器不支援實現請求所需要的功能。例如,客戶發出了一個伺服器不支援的PUT請求

我們再看看jQueryajax的實現是怎麼樣的。在jQuery$.ajax()方法屬於最底層的方法,第二層是load(),$.get()方法,第三層是$.getScript()和$.getJSON()方法。我只整理一下$.ajax()方法,因為我平時用的最多。

$.ajax({ 
    url: "http://www.microsoft.com",    //請求的url地址 
    dataType: "json",   //返回格式為json 
    async: true, //請求是否非同步,預設為非同步,這也是ajax重要特性 
    data: { "id": "value" },    //引數值 
    type: "GET",   //請求方式 
    beforeSend: function() { 
        //請求前的處理 
    }, 
    success: function(data,textStatus) { 
        //請求成功時處理 
        alert(data);
    }, 
    complete: function() { 
        //請求完成的處理 
    }, 
    error: function() { 
        //請求出錯處理 
    } 
}); 

本篇的Ajax使用就總結到這裡,當然還有一些方法並未能全部的總結。在以後使用中,我會把它們也總結下來。