ajax

ajax的工作原理


Ajax的原理簡單來說通過XmlHttpRequest對象來向服務器發(fā)異步請求,從服務器獲得數(shù)據(jù),然后用javascript來操作DOM而更新頁面。這其中最關鍵的一步就是從服務器獲得請求數(shù)據(jù)。要清楚這個過程和原理,我們必須對XMLHttpRequest有所了解。

XMLHttpRequest是ajax的核心機制,它是在IE5中首先引入的,是一種支持異步請求的技術。簡單的說,也就是javascript可以及時向服務器提出請求和處理響應,而不阻塞用戶。達到無刷新的效果。

jQuery框架中$.ajax()的常用參數(shù)

type

類型:String

默認值: "GET")。請求方式("POST"或"GET"),默認為"GET"。注意:其它HTTP請求方法,如PUT和DELETE也可以使用,但僅部分瀏覽器支持。

url

類型:String

默認值:當前頁地址。發(fā)送請求的地址。

success

類型:Function

請求成功后的回調(diào)函數(shù)。

參數(shù):由服務器返回,并根據(jù)dataType參數(shù)進行處理后的數(shù)據(jù);描述狀態(tài)的字符串。

這是一個Ajax事件。


async

類型:Boolean

默認值: true。默認設置下,所有請求均為異步請求。如果需要發(fā)送同步請求,請將此選項設置為false。

注意,同步請求將鎖住瀏覽器,用戶其它操作必須等待請求完成才可以執(zhí)行。

cache

類型:Boolean

默認值: true,dataType為script和jsonp時默認為false。設置為false將不緩存此頁面。

jQuery 1.2新功能。


data

類型:String

發(fā)送到服務器的數(shù)據(jù)。將自動轉換為請求字符串格式。GET請求中將附加在URL后。查看processData選項說明以禁止此自動轉換。必須為Key/Value格式。如果為數(shù)組,jQuery將自動為不同值對應同一個名稱。如{foo:["bar1",

"bar2"]}轉換為'&foo=bar1&foo=bar2'。

dataType

類型:String

預期服務器返回的數(shù)據(jù)類型。如果不指定,jQuery將自動根據(jù)HTTP包MIME信息來智能判斷,比如XML MIME類型就被識別為XML。在1.4中,JSON就會生成一個JavaScript對象,而script則會執(zhí)行這個腳本。隨后服務器端返回的數(shù)據(jù)會根據(jù)這個值解析后,傳遞給回調(diào)函數(shù)。可用值:

·"xml":返回XML文檔,可用jQuery處理。

·"html":返回純文本HTML信息;包含的script標簽會在插入dom時執(zhí)行。

·"script":返回純文本JavaScript代碼。不會自動緩存結果。除非設置了"cache"參數(shù)。注意:在遠程請求時(不在同一個域下),所有POST請求都將轉為GET請求。(因為將使用DOM的script標簽來加載)

·"json":返回JSON數(shù)據(jù)。

·"jsonp": JSONP格式。使用JSONP形式調(diào)用函數(shù)時,如"myurl?callback=?" jQuery將自動替換?為正確的函數(shù)名,以執(zhí)行回調(diào)函數(shù)。

·"text":返回純文本字符串

error

類型:Function

默認值:自動判斷(xml或html)。請求失敗時調(diào)用此函數(shù)。

有以下三個參數(shù):XMLHttpRequest對象、錯誤信息、(可選)捕獲的異常對象。

如果發(fā)生了錯誤,錯誤信息(第二個參數(shù))除了得到null之外,還可能是"timeout", "error",

"notmodified"和"parsererror"。

這是一個Ajax事件。

Ajax的最大的特點

Ajax可以實現(xiàn)異步通信效果,實現(xiàn)頁面局部刷新,帶來更好的用戶體驗;按需獲取數(shù)據(jù),節(jié)約帶寬資源

ajax的缺點

1、ajax不支持瀏覽器back按鈕。

2、安全問題AJAX暴露了與服務器交互的細節(jié)。

3、對搜索引擎的支持比較弱。

4、破壞了程序的異常機制

ajax請求的時候get和post方式的區(qū)別

get一般用來進行查詢操作,url地址有長度限制,請求的參數(shù)都暴露在url地址當中,如果傳遞中文參數(shù),需要自己進行編碼操作,安全性較低。

post請求方式主要用來提交數(shù)據(jù),沒有數(shù)據(jù)長度的限制,提交的數(shù)據(jù)內(nèi)容存在于http請求體中,數(shù)據(jù)不會暴漏在url地址中。

ajax的過程

1.創(chuàng)建XMLHttpRequest對象,也就是創(chuàng)建一個異步調(diào)用對象

2.創(chuàng)建一個新的HTTP請求,并指定該HTTP請求的方法、URL及驗證信息

3.設置響應HTTP請求狀態(tài)變化的函數(shù)

4.發(fā)送HTTP請求

5.獲取異步調(diào)用返回的數(shù)據(jù)

6.使用JavaScript和DOM實現(xiàn)局部刷新

JavaScript的同源策略

同源策略是客戶端腳本(尤其是Javascript)的重要的安全度量標準。它最早出自Netscape Navigator2.0,其目的是防止某個文檔或腳本從多個不同源裝載。所謂同源指的是:協(xié)議,域名,端口相同,同源策略是一種安全協(xié)議,指一段腳本只能讀取來自同一來源的窗口和文檔的屬性。


解決跨域問題

理解跨域的概念:協(xié)議、域名、端口都相同才同域,否則都是跨域

出于安全考慮,服務器不允許ajax跨域獲取數(shù)據(jù),但是可以跨域獲取文件內(nèi)容,所以基于這一點,可以動態(tài)創(chuàng)建script標簽,使用標簽的src屬性訪問js文件的形式獲取js腳本,并且這個js腳本中的內(nèi)容是函數(shù)調(diào)用,該函數(shù)調(diào)用的參數(shù)是服務器返回的數(shù)據(jù),為了獲取這里的參數(shù)數(shù)據(jù),需要事先在頁面中定義回調(diào)函數(shù),在回調(diào)函數(shù)中處理服務器返回的數(shù)據(jù),

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容