javascript
ajax get请求_JSP中的对讲机Ajax简述
點擊藍(lán)字
關(guān)注我們
傳統(tǒng)上,網(wǎng)頁需要重新加載才能更新內(nèi)容。對于基于網(wǎng)絡(luò)的電子郵件來說,這意味著用戶必須手動重新加載他們的收件箱,以檢查和查看他們是否有新郵件。這有很大的缺點:速度慢,而且需要用戶輸入。當(dāng)用戶重新加載他們的收件箱時,服務(wù)器必須重新構(gòu)建整個網(wǎng)頁,并重新發(fā)送所有的HTML、CSS、JavaScript以及用戶的電子郵件。這是非常低效的。理想情況下,服務(wù)器應(yīng)該只需要發(fā)送用戶的新郵件,而不是整個頁面。到了2003年,所有的主流瀏覽器都解決了這個問題,采用了XMLHttpRequest(XHR)對象,允許瀏覽器與服務(wù)器進(jìn)行通信,而不需要重新加載頁面。
XMLHttpRequest對象是一種叫做Ajax(異步JavaScript和XML)的技術(shù)的一部分。使用Ajax,數(shù)據(jù)就可以通過XMLHttpRequest API在瀏覽器和服務(wù)器之間傳遞,而不需要重新加載網(wǎng)頁。隨著XMLHttpRequest對象的廣泛采用,很快就可以構(gòu)建像Google Maps和Gmail這樣的Web應(yīng)用程序,使用XMLHttpRequest來獲取新的地圖磁貼或新的電子郵件,而無需重新加載整個頁面。
Ajax請求是由JavaScript代碼觸發(fā)的;你的代碼向一個URL發(fā)送一個請求,當(dāng)它收到響應(yīng)時,可以觸發(fā)一個回調(diào)函數(shù)來處理響應(yīng)。因為請求是異步的,所以當(dāng)請求被處理時,你的其他代碼會繼續(xù)執(zhí)行,所以必須使用回調(diào)來處理響應(yīng)。
不幸的是,不同的瀏覽器對Ajax API的實現(xiàn)方式不同。通常情況下,這意味著開發(fā)人員必須考慮到所有不同的瀏覽器,以確保Ajax能夠普遍工作。幸運的是,jQuery提供了Ajax支持,它抽象地消除了痛苦的瀏覽器差異。它既提供了功能齊全的$.ajax()方法,也提供了簡單方便的方法,如$.get()、$.getScript()、$.getJSON()、$.post()和$().load()。
盡管名為 "Ajax",但大多數(shù)jQuery應(yīng)用程序?qū)嶋H上并不使用XML;相反,它們以純HTML或JSON(JavaScript對象符號)的形式傳輸數(shù)據(jù)。
一般來說,Ajax不能跨域工作。例如,一個從example1.com加載的網(wǎng)頁無法向example2.com發(fā)出Ajax請求,因為這將違反相同的來源策略。作為一種解決方法,JSONP(帶填充的JSON)使用標(biāo)簽從另一個域加載包含任意JavaScript內(nèi)容和JSON的文件。最近,瀏覽器已經(jīng)實現(xiàn)了一種叫做跨源資源共享(CORS)的技術(shù),它允許向不同域的Ajax請求。
關(guān)鍵概念
正確使用Ajax相關(guān)的jQuery方法,需要先了解一些關(guān)鍵概念。
GET vs. POST
向服務(wù)器發(fā)送請求的兩種最常見的 "方法 "是GET和POST。了解每種方法的正確應(yīng)用是很重要的。
GET方法應(yīng)該用于非破壞性操作--也就是說,你只是從服務(wù)器上 "獲取 "數(shù)據(jù),而不是改變服務(wù)器上的數(shù)據(jù)的操作。例如,對搜索服務(wù)的查詢可能是一個GET請求。GET請求可能會被瀏覽器緩存,這可能會導(dǎo)致不可預(yù)知的行為,如果你沒有想到的話。GET請求一般會在一個查詢字符串中發(fā)送所有數(shù)據(jù)。
POST方法應(yīng)該用于破壞性操作--也就是在服務(wù)器上改變數(shù)據(jù)的操作。例如,用戶保存一篇博客文章應(yīng)該是一個POST請求。POST請求一般不會被瀏覽器緩存;查詢字符串可以是URL的一部分,但數(shù)據(jù)往往會作為post數(shù)據(jù)單獨發(fā)送。
數(shù)據(jù)類型
jQuery通常需要一些指令來說明你期望從Ajax請求中得到的數(shù)據(jù)類型;在某些情況下,數(shù)據(jù)類型是由方法名指定的,而在其他情況下,它是作為配置對象的一部分提供的。有幾個選項。
text用于傳輸簡單的字符串。
html用于傳輸要放在頁面上的HTML塊。
script用于添加一個新的腳本到頁面。
json用于傳輸JSON格式的數(shù)據(jù),可以包括字符串、數(shù)組和對象。
注意:從jQuery 1.4開始,如果你的服務(wù)器發(fā)送的JSON數(shù)據(jù)沒有正確的格式化,請求可能會無聲地失敗。參見http://json.org,了解正確格式化JSON的細(xì)節(jié),但作為一般規(guī)則,使用內(nèi)置的語言方法在服務(wù)器上生成JSON以避免語法問題。
jsonp用于從另一個域傳輸JSON數(shù)據(jù)。
xml用于在自定義XML模式中傳輸數(shù)據(jù)。
在大多數(shù)情況下考慮使用JSON格式,因為它提供了最大的靈活性。它對于同時發(fā)送HTML和數(shù)據(jù)特別有用。
異步Ajax的異步性讓很多jQuery新用戶措手不及。因為Ajax調(diào)用默認(rèn)是異步的,所以響應(yīng)不是立即可用。響應(yīng)只能使用回調(diào)來處理。所以,舉例來說,下面的代碼將無法工作。
var response; $.get( "foo.php", function( r ) { ? ?response = r;}); console.log( response ); // undefined相反,我們需要向我們的請求傳遞一個回調(diào)函數(shù);這個回調(diào)將在請求成功時運行,此時我們可以訪問它返回的數(shù)據(jù)(如果有的話)。
$.get( "foo.php", function( response ) { ? ?console.log( response ); // server response});同源策略和JSONP。在一般情況下,Ajax請求被限制在相同的協(xié)議(http或https),相同的端口,和相同的域名作為頁面的請求。這個限制不適用于通過jQuery的Ajax方法加載的腳本。
注意:Internet Explorer小于10的版本不支持跨域AJAX請求。
另一個例外是針對另一個域的JSONP服務(wù)的請求。在JSONP的情況下,服務(wù)的提供者已經(jīng)同意用一個腳本來響應(yīng)你的請求,這個腳本可以使用標(biāo)簽加載到頁面中,從而避免了同源的限制;這個腳本將包括你所請求的數(shù)據(jù),并包裹在你提供的回調(diào)函數(shù)中。
Ajax和FirebugFirebug(或 Chrome 或 Safari 中的 Webkit Inspector)是處理 Ajax 請求的重要工具。您可以在 Firebug 的 Console 選項卡(以及 Webkit Inspector 的 Resources > XHR 面板)中查看 Ajax 請求的發(fā)生情況,您還可以單擊請求以展開請求并查看請求頭、響應(yīng)頭、響應(yīng)內(nèi)容等詳細(xì)信息。如果某個 Ajax 請求沒有按照預(yù)期進(jìn)行,那么首先要查找的就是該請求的問題所在。
球分享
球點贊
球在看
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的ajax get请求_JSP中的对讲机Ajax简述的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python split()方法_秘籍:
- 下一篇: python俄罗斯方块实训报告_Pyth