Ajax 並不算是一種新的技術,全稱是 asynchronous javascript and xml,能夠說是已 有技術的組合,主要用來實現客戶端與服務器端的異步通訊效果,實現頁面的局部刷新,早 期的瀏覽器並不能原生支持 ajax,可使用隱藏幀(iframe)方式變相實現異步效果,後 來的瀏覽器提供了對 ajax 的原生支持javascript
使 用 ajax 原 生 方 式 發 送 請 求 主 要 通 過 XMLHttpRequest( 標 準 瀏 覽 器 ) 、 ActiveXObject(IE 瀏覽器)對象實現異步通訊效果css
基本步驟:java
var xhr =null;//建立對象
if(window.XMLHttpRequest){
xhr = new XMLHttpRequest();
}else{
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
xhr.open(「方式」,」地址」,」標誌位」);//初始化請求
xhr.setRequestHeader(「」,」」);//設置 http 頭信息
xhr.onreadystatechange =function(){}//指定回調函數
xhr.send();//發送請求
複製代碼
js 框架(jQuery/EXTJS 等)提供的 ajax API 對原生的 ajax 進行了封裝,熟悉了基礎 理論,再學習別的框架就會駕輕就熟,好多都是換湯不換藥的內容ajax
張三叫李四去吃飯,李四一直忙得不停,張三一直等着,直到李四忙完兩我的一塊去吃飯 =瀏覽器向服務器請求數據,服務器比較忙,瀏覽器一直等着(頁面白屏),直到服務器返 回數據,瀏覽器才能顯示頁面數據庫
張三叫李四去吃飯,李四在忙,張三說了一聲而後本身就去吃飯了,李四忙完後本身去吃 =瀏覽器向服務器請求數據,服務器比較忙,瀏覽器能夠自如的幹原來的事情(顯示頁面), 服務器返回數據的時候通知瀏覽器一聲,瀏覽器把返回的數據再渲染到頁面,局部更新json
理解跨域的概念:協議、域名、端口都相同才同域,不然都是跨域api
出於安全考慮,服務器不容許 ajax 跨域獲取數據,可是能夠跨域獲取文件內容,因此 基於這一點,能夠動態建立 script 標籤,使用標籤的 src 屬性訪問 js 文件的形式獲取 js 腳本,而且這個 js 腳本中的內容是 函數調用,該函數調用的參數是服務器返回的數據,爲 了獲取這裏的參數數據,須要事先在頁面中定義回調函數,在回調函數中處理服務器返回的 數據,這就是解決跨域問題的主流解決方案跨域
對於 ajax 請求傳遞的參數:數組
同源策略是客戶端腳本(尤爲是 Javascript)的重要的安全度量標準。它最先出自 Netscape Navigator2.0,其目的是防止某個文檔或腳本從多個不一樣源裝載。所謂同源指的 是:協議,域名,端口相同,同源策略是一種安全協議,指一段腳本只能讀取來自同一來源 的窗口和文檔的屬性。瀏覽器
GET:通常用於信息獲取,使用 URL 傳遞參數,對所發送信息的數量也有限制,通常在 2000 個字符,有的瀏覽器是 8000 個字符 POST:通常用於修改服務器上的資源,對所發送的信息沒有限制 在如下狀況中,請使用 POST 請求:
Ajax 能夠實現異步通訊效果,實現頁面局部刷新,帶來更好的用戶體驗;按需獲取數 據,節約帶寬資源;
一、ajax 不支持瀏覽器 back 按鈕。 二、安全問題 AJAX 暴露了與服務器交互的細節。 三、對搜索引擎的支持比較弱。 四、破壞了程序的異常機制。
get 通常用來進行查詢操做,url 地址有長度限制,請求的參數都暴露在 url 地址當中, 若是傳遞中文參數,須要本身進行編碼操做,安全性較低。 post 請求方式主要用來提交數據,沒有數據長度的限制,提交的數據內容存在於 http 請求體中,數據不會暴漏在 url 地址中。
Jsonp 並非一種數據格式,而 json 是一種數據格式,jsonp 是用來解決跨域獲取數據 的一種解決方案,具體是經過動態建立 script 標籤,而後經過標籤的 src 屬性獲取 js 文件 中的 js 腳本,該腳本的內容是一個函數調用,參數就是服務器返回的數據,爲了處理這些 返回的數據,須要事先在頁面定義好回調函數,本質上使用的並非 ajax 技術
優勢:可使得頁面不重載所有內容的狀況下加載局部內容,下降數據傳輸量,避免用 戶不斷刷新或者跳轉頁面,提升用戶體驗 缺點:對搜索引擎不友好;要實現 ajax 下的先後退功能成本較大;可能形成請求數的 增長跨域問題限制;
優勢:輕量級、易於人的閱讀和編寫,便於機器(JavaScript)解析,支持複合數據類 型(數組、對象、字符串、數字)
200 - 請求成功 301 - 資源(網頁等)被永久轉移到其它 URL 404 - 請求的資源(網頁等)不存在 500 - 內部服務器錯誤
分爲 4 個步驟:
get 通常用來進行查詢操做,url 地址有長度限制,請求的參數都暴露在 url 地址當中, 若是傳遞中文參數,須要本身進行編碼操做,安全性較低。 post 請求方式主要用來提交數據,沒有數據長度的限制,提交的數據內容存在於 http 請求體中,數據不會暴漏在 url 地址中。
使用 eval() 或者 JSON.parse() 鑑於安全性考慮,推薦使用 JSON.parse()更靠譜,對 數據的安全性更好。
本地對象爲獨立於宿主環境的 ECMAScript 提供的對象,包括 Array Object RegExp 等 能夠 new 實例化的對象 內置對象爲 Gload,Math 等不能夠實例化的(他們也是本地對象,內置對象是本地對象 的一個子集) 宿主對象爲全部的非本地對象,全部的 BOM 和 DOM 對象都是宿主對象,如瀏覽器自帶的 document,window 等對象
確保用戶在不一樣地區能用最快的速度打開網站,其中某個域名崩潰用戶也能經過其餘鬱 悶訪問網站,而且不一樣的資源放到不一樣的服務器上有利於減輕單臺服務器的壓力。
一、壓縮 css、js 文件 二、合併 js、css 文件,減小 http 請求 三、外部 js、css 文件放在最底下 四、減小 dom 操做,儘量用變量替代沒必要要的 dom 操做
200 OK //客戶端請求成功 400 Bad Request //客戶端請求有語法錯誤,不能被服務器所理解 403 Forbidden //服務器收到請求,可是拒絕提供服務 404 Not Found //請求資源不存在,輸入了錯誤的 URL 500 Internal Server Error //服務器發生不可預期的錯誤 503 Server Unavailable //服務器當前不能處理客戶端的請求,一段時間後可能恢復正常