jQuery中關于Ajax的詳解

本文介紹如何使用jquery實現Ajax功能. 用于發送Ajax請求的相關函數如load, get, getJSON和post這些漸變Ajax方法, 對于核心的ajax 方法沒有過多介紹, 主要是通過配置復雜的參數實現完全控制Ajax請求。

Ajax讓用戶頁面豐富起來, 增強用戶體驗. Ajax是所有Web開發的必修課. 雖然Ajax技術并不復雜, 但是實現方式還是會因為每個開發人員而有所差異.jQuery提供一系列Ajax函數來幫助我們統一這種差異, 并且讓調用Ajax更加簡單.jQuery提供了幾個用于發送Ajax請求的函數. 其中最核心也是最復雜的是jQuery.ajax(),所有的其他Ajax函數都是它的一個簡化調用.當我們想要完全控制Ajax時可以使用此結果, 否則還是使用簡化方法如get, post, load等更加方便. 所以jQuery.ajax( options ) 方法放到最后一個介紹. 先來介紹最簡單的load方法:

1. load( url, [data], [callback] )

Returns: jQuery包裝集說明

load方法能夠載入遠程 HTML 文件代碼并插入至 DOM 中。

默認使用 GET 方式, 如果傳遞了data參數則使用Post方式.

傳遞附加參數時自動轉換為 POST 方式。jQuery 1.2 中,可以指定選擇符,來篩選載入的 HTML 文檔,DOM 中將僅插入篩選出的 HTML 代碼。語法形如 "url #some > selector", 默認的選擇器是"body>*".

講解:

load是最簡單的Ajax函數, 但是使用具有局限性:

它主要用于直接返回HTML的Ajax接口

load是一個jQuery包裝集方法,需要在jQuery包裝集上調用,并且會將返回的HTML加載到對象中, 即使設置了回調函數也還是會加載。

不過不可否認load接口設計巧妙并且使用簡單.下面通過示例來演示Load接口的使用:

 
  1. <!DOCTYPE?html?PUBLIC?"-//W3C//DTD?XHTML?1.0?Transitional//EN"?"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">?
  2. <html?xmlns="http://www.w3.org/1999/xhtml">?
  3. <head>?
  4. ????<title>jQuery?Ajax?-?Load</title>?
  5. ?
  6. ????<script?type="text/javascript"?src="../scripts/jquery-1.3.2-vsdoc2.js"></script>?
  7. ?
  8. ????<script?type="text/javascript">?
  9. ????????$(function() ?
  10. ????????{ ?
  11. ????????????$("#btnAjaxGet").click(function(event) ?
  12. ????????????{ ?
  13. ????????????????//發送Get請求 ?
  14. ????????????????$("#divResult").load("../data/AjaxGetMethod.aspx?param=btnAjaxGet_click"?+?"&timestamp="?+?(new?Date()).getTime()); ?
  15. ????????????}); ?
  16. ?
  17. ????????????$("#btnAjaxPost").click(function(event) ?
  18. ????????????{ ?
  19. ????????????????//發送Post請求 ?
  20. ????????????????$("#divResult").load("../data/AjaxGetMethod.aspx",?{?"param":?"btnAjaxPost_click"?}); ?
  21. ????????????}); ?
  22. ?
  23. ????????????$("#btnAjaxCallBack").click(function(event) ?
  24. ????????????{ ?
  25. ????????????????//發送Post請求,?返回后執行回調函數. ?
  26. ????????????????$("#divResult").load("../data/AjaxGetMethod.aspx",?{?"param":?"btnAjaxCallBack_click"?},?function(responseText,?textStatus,?XMLHttpRequest) ?
  27. ????????????????{ ?
  28. ????????????????????responseText?=?"?Add?in?the?CallBack?Function!?<br/>"?+?responseText ?
  29. ????????????????????$("#divResult").html(responseText);?//或者:?$(this).html(responseText); ?
  30. ????????????????}); ?
  31. ????????????}); ?
  32. ?
  33. ????????????$("#btnAjaxFiltHtml").click(function(event) ?
  34. ????????????{ ?
  35. ????????????????//發送Get請求,?從結果中過濾掉?"鞍山"?這一項 ?
  36. ????????????????$("#divResult").load("../data/AjaxGetCityInfo.aspx?resultType=html"?+?"&timestamp="?+?(new?Date()).getTime()?+?"?ul>li:not(:contains('鞍山'))"); ?
  37. ????????????}); ?
  38. ?
  39. ????????}) ?
  40. ????</script>?
  41. ?
  42. </head>?
  43. <body>?
  44. ????<button?id="btnAjaxGet">使用Load執行Get請求</button><br?/>?
  45. ????<button?id="btnAjaxPost">使用Load執行Post請求</button><br?/>?
  46. ????<button?id="btnAjaxCallBack">使用帶有回調函數的Load方法</button><br?/>?
  47. ????<button?id="btnAjaxFiltHtml">使用selector過濾返回的HTML內容</button>?
  48. ????<br?/>?
  49. ????<div?id="divResult"></div>?
  50. </body>?
  51. </html>?

提示:我們要時刻注意瀏覽器緩存, 當使用GET方式時要添加時間戳參數 (net Date()).getTime() 來保證每次發送的URL不同, 可以避免瀏覽器緩存.

提示: 當在url參數后面添加了一個空格, 比如" "的時候, 會出現"無法識別符號"的錯誤, 請求還是能正常發送. 但是無法加載HTML到DOM. 刪除后問題解決.

2.jQuery.get( url, [data], [callback], [type] )

Returns: XMLHttpRequest說明:

通過遠程 HTTP GET 請求載入信息。

這是一個簡單的 GET 請求功能以取代復雜 $.ajax 。請求成功時可調用回調函數。如果需要在出錯時執行函數,請使用 $.ajax。

講解:

此函數發送Get請求, 參數可以直接在url中拼接, 比如:

 
  1. <script>?
  2. ????$.get("../data/AjaxGetMethod.aspx?param=btnAjaxGet_click"); ?
  3. </script>?

或者通過data參數傳遞:

 
  1. <script>?
  2. ????$.get("../data/AjaxGetMethod.aspx",?{?"param":?"btnAjaxGet2_click"?}); ?
  3. </script>?

兩種方式效果相同, data參數會自動添加到請求的url中如果url中的某個參數, 又通過data參數傳遞, 不會自動合并相同名稱的參數.回調函數的簽名如下:

 
  1. <script>?
  2. function?(data,?textStatus)?{ ?
  3. ??//?data?could?be?xmlDoc,?jsonObj,?html,?text,?etc... ?
  4. ??this;?//?the?options?for?this?ajax?request ?
  5. } ?
  6. </script>?

其中data是返回的數據, testStatus表示狀態碼, 可能是如下值:

"timeout","error","notmodified","success","parsererror"

在回調函數中的this是獲取options對象的引用.有關options的各種說明, 請參見:

http://docs.jquery.com/Ajax/jQuery.ajax#options

type參數是指data數據的類型, 可能是下面的值:

"xml", "html", "script", "json", "jsonp", "text".

默認為"html".

jQuery.getJSON( url, [data], [callback] ) 方法就相當于 jQuery.get(url, [data],[callback], "json")

3. jQuery.getJSON( url, [data], [callback] )

Returns: XMLHttpRequest

相當于: jQuery.get(url, [data],[callback], "json")

說明:通過 HTTP GET 請求載入 JSON 數據。

在jQuery 1.2 中,您可以通過使用JSONP 形式的回調函數來加載其他網域的JSON數據,如 "myurl?callback=?"。jQuery 將自動替換 ? 為正確的函數名,以執行回調函數。

注意:此行以后的代碼將在這個回調函數執行前執行。

講解:getJSON函數僅僅將get函數的type參數設置為"JSON"而已. 在回調函數中獲取的數據已經是按照JSON格式解析后的對象了:

 
  1. <script>?
  2. ????$.getJSON("../data/AjaxGetCityInfo.aspx",?{?"resultType":?"json"?},?function(data,?textStatus) ?
  3. ????{ ?
  4. ??????????alert(data.length); ?
  5. ??????????alert(data[0].CityName); ?
  6. ????}); ?
  7. </script>?

服務器端返回的字符串如下:

 
  1. <script>?
  2. ????[{""pkid"":""0997"",""ProvinceId"":""XJ"",""CityName"":""阿克蘇"",""CityNameEn"":""Akesu"",""PostCode"":""843000"",""isHotCity"":false}, ?
  3. ?????{""pkid"":""0412"",""ProvinceId"":""LN"",""CityName"":""鞍山"",""CityNameEn"":""Anshan"",""PostCode"":""114000"",""isHotCity"":false}] ?
  4. </script>?

4.jQuery.getScript( url, [callback] )

Returns: XMLHttpRequest

相當于: jQuery.get(url, null, [callback], "script")

說明:通過 HTTP GET 請求載入并執行一個 JavaScript 文件。

jQuery 1.2 版本之前,getScript 只能調用同域 JS 文件。 1.2中,您可以跨域調用 JavaScript 文件。注意:Safari 2 或更早的版本不能在全局作用域中同步執行腳本。如果通過 getScript 加入腳本,請加入延時函數。

講解:

以前我使用dojo類庫時官方默認的文件不支持跨域最后導致我放棄使用dojo(雖然在網上找到了可以跨域的版本, 但是感覺不夠完美). 所以我特別對這個函數的核心實現和使用做了研究.

首先了解此函數的jQuery內部實現, 仍然使用get函數, jQuery所有的Ajax函數包括get最后都是用的是jQuery.ajax(), getScript將傳入值為"script"的type參數, 最后在Ajax函數中對type為script的請求做了如下處理:

 
  1. <script>?
  2. ????var?head?=?document.getElementsByTagName_r("head")[0]; ?
  3. ????var?script?=?document.createElement_x("script"); ?
  4. ????sscript.src?=?s.url; ?
  5. </script>?

上面的代碼動態建立了一個script語句塊, 并且將其加入到head中:

 
  1. <script>?
  2. head.appendChild(script); ?
  3. </script>?

當腳本加載完畢后, 再從head中刪除:

 
  1. <script>?
  2. ????//?Handle?Script?loading ?
  3. ????????????????if?(?!jsonp?)?{ ?
  4. ????????????????????var?done?=?false; ?
  5. ?
  6. ????????????????????//?Attach?handlers?for?all?browsers ?
  7. ????????????????????scriptscript.onload?=?script.onreadystatechange?=?function(){ ?
  8. ????????????????????????if?(?!done?&&?(!this.readyState?|| ?
  9. ????????????????????????????????this.readyState?==?"loaded"?||?this.readyState?==?"complete")?)?{ ?
  10. ????????????????????????????done?=?true; ?
  11. ????????????????????????????success(); ?
  12. ????????????????????????????complete(); ??
  13. ????????????????????????????//?Handle?memory?leak?in?IE ?
  14. ????????????????????????????scriptscript.onload?=?script.onreadystatechange?=?null; ?
  15. ????????????????????????????head.removeChild(?script?); ?
  16. ????????????????????????} ?
  17. ????????????????????}; ?
  18. ????????????????} ?
  19. </script>?

5. jQuery.post( url, [data], [callback], [type] )

Returns: XMLHttpRequest

說明:通過遠程 HTTP POST 請求載入信息。

這是一個簡單的 POST 請求功能以取代復雜 $.ajax 。請求成功時可調用回調函數。如果需要在出錯時執行函數,請使用 $.ajax。

講解:具體用法和get相同, 只是提交方式由"GET"改為"POST".

6. jQuery.ajax( options )

Returns: XMLHttpRequest

說明:通過 HTTP 請求加載遠程數據。

jQuery 底層 AJAX 實現。簡單易用的高層實現見 $.get, $.post 等。

$.ajax() 返回其創建的 XMLHttpRequest 對象。大多數情況下你無需直接操作該對象,但特殊情況下可用于手動終止請求。

$.ajax() 只有一個參數:參數 key/value 對象,包含各配置及回調函數信息。詳細參數選項見下。

注意: 如果你指定了 dataType 選項,請確保服務器返回正確的 MIME 信息,(如 xml 返回 "text/xml")。錯誤的 MIME 類型可能導致不可預知的錯誤。見 Specifying the Data Type for AJAX Requests 。

注意:如果dataType設置為"script",那么所有的遠程(不在同一域名下)的POST請求都將轉化為GET請求。(因為將使用DOM的script標簽來加載)

jQuery 1.2 中,您可以跨域加載 JSON 數據,使用時需將數據類型設置為 JSONP。使用 JSONP 形式調用函數時,如 "myurl?callback=?" jQuery 將自動替換 ? 為正確的函數名,以執行回調函數。數據類型設置為 "jsonp" 時,jQuery 將自動調用回調函數。

講解:

這是jQuery中Ajax的核心函數, 上面所有的發送Ajax請求的函數內部最后都會調用此函數.options參數支持很多參數, 使用這些參數可以完全控制ajax請求. 在Ajax回調函數中的this對象也是options對象.

因為平時使用最多的還是簡化了的get和post函數, 所以在此不對options參數做詳細講解了. options參數文檔請見:http://docs.jquery.com/Ajax/jQuery.ajax#options

本文介紹如何使用jquery實現Ajax功能. 用于發送Ajax請求的相關函數如load, get, getJSON和post這些漸變Ajax方法, 對于核心的ajax 方法沒有過多介紹, 主要是通過配置復雜的參數實現完全控制Ajax請求。

?

?

轉載于:https://www.cnblogs.com/wangxinming/archive/2012/11/10/2763934.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379124.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379124.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379124.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python---實驗九作業

1&#xff0c;使用tkinter實現計算器程序。實現效果如下&#xff1a; from tkinter import * from tkinter.ttk import *def frame(master):"""將共同的屬性作為默認值, 以簡化Frame創建過程"""w Frame(master)w.pack(sideTOP, expandYES, fill…

分析FLV文件分析和解析器的開源代碼

分析一下GitHub上一份FLV文件分析和解析器的開源代碼 GitHub源碼地址&#xff1a;功能強大的 FLV 文件分析和解析器 &#xff1a;可以將flv文件的視頻tag中的h264類型數據和音頻tag中的aac類型數據導出 &#xff08;只限h264和aac&#xff09; (這個代碼不太適合用于大文件的分…

用pv操作描述如下前驅圖_LinkedList實現分析(二)——常用操作

上一篇文章LinkedList實現分析(一)——LinkedList初探與對象創建介紹了LinkedList中的一些重要屬性和構造方法&#xff0c;下面我們將詳細介紹一下LinkedList提高的常用方法的實現原理元素添加###add(E e)方法往LinkedList添加元素&#xff0c;LinkedList提供了多重方式&#x…

C++多重繼承與虛基類及與.NET的比較

多重繼承前面我們介紹的派生類只有一個基類&#xff0c;稱為單基派生或單一繼承。在實際運用中&#xff0c;我們經常需要派生類同時具有多個基類&#xff0c;這種方法稱為多基派生或多重繼承。2.1 多重繼承的聲明&#xff1a;在 C 中&#xff0c;聲明具有兩個以上基類的派生類與…

Javascript的IE和Firefox兼容性匯編

window.event現有問題&#xff1a;使用 window.event 無法在 FF 上運行解決方法&#xff1a;FF 的 event 只能在事件發生的現場使用&#xff0c;此問題暫無法解決。可以這樣變通&#xff1a;原代碼(可在IE中運行)&#xff1a;<input type"button" name"someB…

Java Double類compareTo()方法與示例

雙類compareTo()方法 (Double class compareTo() method) compareTo() method is available in java.lang package. compareTo()方法在java.lang包中可用。 compareTo() method is used to check equality or inequality for this Double-object against the given Double-obje…

平院實訓門禁系統導入

這是我的配置&#xff08;如果是Win10最好每一步都管理員身份運行&#xff09; win7 SQLServer2008 VS2012 切記&#xff1a;注意&#xff1a;當你SQLserver創建數據庫和VS連接數據庫的時候得用同一種方式&#xff0c;要么都用window&#xff08;主機名&#xff09;&#xff0…

ffmpeg 解碼音頻(aac、mp3)輸出pcm文件

ffmpeg 解碼音頻&#xff08;aac、mp3&#xff09;輸出pcm文件 播放pcm可以參考&#xff1a; ffplay -ar 48000 -ac 2 -f f32le out.pcm main.c #include <stdio.h> #include <stdlib.h> #include <string.h>#include <libavutil/frame.h> #include …

Jquery getJSON()

getJSON與aspx 準備工作 Customer類 public class Customer{public int Unid { get; set; }public string CustomerName { get; set; }public string Memo { get; set; }public string Other { get; set; }}&#xff08;一&#xff09;ashx Customer customer new Customer { …

北京中信銀行總行地址_中信銀行拉薩分行舉行“存款保險標識”啟用和存款保險條例宣傳活動...

11月NOV中信銀行拉薩分行舉行“存款保險標識”啟用和《存款保險條例》宣傳活動揭牌啟用儀式111月Jul根據人民銀行和總行關于“存款保險標識”啟用工作相關要求&#xff0c;分行行領導高度重視“存款保險標識”啟用和《存款保險條例》宣傳活動工作&#xff0c;按照統一工作部署、…

Java ClassLoader getPackage()方法與示例

ClassLoader類的getPackage()方法 (ClassLoader Class getPackage() method) getPackage() method is available in java.lang package. getPackage()方法在java.lang包中可用。 getPackage() method is used to return the package that has been defined in ClassLoader or t…

C---編寫程序:求出1~1000之間能被7或12整除,但不能同時被二者整除的所有整數,將結果保存在數組中,要求程序數據的輸入、計算和輸出均使用函數實現。

編寫程序&#xff1a;求出1~1000之間能被7或12整除&#xff0c;但不能同時被二者整除的所有整數&#xff0c;將結果保存在數組中&#xff0c;要求程序數據的輸入、計算和輸出均使用函數實現。 編程思路&#xff1a;分別編寫函數input()、cal()、output()實現數據的輸入、計算和…

報告稱我國成最大移民輸出國 將形成投資產業鏈(關注)

時代特有的現象&#xff0c;我們應該予以關注 “現在國內房價這么高&#xff0c;政策也看不清&#xff0c;還不如逢高賣掉之前買的幾套房子&#xff0c;一兩套房子的錢辦個投資移民&#xff0c;趁還年輕&#xff0c;拿到綠卡后享受一下美國本國待遇的高等教育了。”廣州&#x…

轉整型_156.Ruby烘焙大理石豆沙吐司解鎖大理石花紋整型

好看又好吃的大理石豆沙面包。紅豆餡均勻分布在松軟細膩的面包體里&#xff0c;手撕著吃&#xff0c;一層層的甜美與溫柔&#xff5e;關于吐司面包&#xff0c;我公眾號里寫過白吐司(基礎款牛奶吐司&#xff0c;超綿鮮奶油吐司)和全麥吐司(基礎款50%全麥吐司&#xff0c;經典燕…

ffmpeg 解碼視頻(h264、mpeg2)輸出yuv420p文件

ffmpeg 解碼視頻&#xff08;h264、mpeg2&#xff09;輸出yuv420p文件 播放yuv可以參考&#xff1a;ffplay -pixel_format yuv420p -video_size 768x320 -framerate 25 out.yuv main.c #include <stdio.h> #include <stdlib.h> #include <string.h>#includ…

VS2010 快捷鍵 (空格顯示 綠點, Tab 顯示箭頭)

VS2010 有用的快捷鍵 &#xff1a; Ctrl r, ctrl w, 切換空格示。 轉載于:https://www.cnblogs.com/fengye87626/archive/2012/11/21/2780716.html

C---編寫程序:實現一個隨堂測試,能進行加減乘除運算。要求如下:(1)隨機產生兩個1~10的正整數,在屏幕上輸出題目,如:5+3=?(2)學生輸入答案,程序檢查學生輸入答案是否正確,若正確,

編寫程序&#xff1a;實現一個隨堂測試&#xff0c;能進行加減乘除運算。要求如下&#xff1a; 1&#xff09;隨機產生兩個1~10的正整數&#xff0c;在屏幕上輸出題目&#xff0c;如&#xff1a;53&#xff1f; 2&#xff09;學生輸入答案&#xff0c;程序檢查學生輸入答案是…

分析一下mp4格式的trak -> mdia -> minf -> stbl -> stts、stsc 這兩個box信息

分析一下mp4格式的trak -> mdia -> minf -> stbl -> stts、stsc 這兩個box信息 &#xff08;因為這兩個box在音頻trak和視頻trak 下都有的&#xff0c;而且都有一個數組的值是比較繞的&#xff09; 目錄&#xff1a;stts&#xff1a;記錄時間戳的&#xff0c;每個s…

利用SQL注入2分鐘入侵網站

說起流光、溯雪、亂刀&#xff0c;可以說是大名鼎鼎無人不知無人不曉&#xff0c;這些都是小榕哥的作品。每次一提起小榕哥來&#xff0c;我的崇拜景仰就如滔滔江水&#xff0c;連綿不絕~~~~&#xff08;又來了&#xff01;&#xff09; 讓我們崇拜的小榕哥最新又發布了SQL注入…

pip安裝deb_技術|如何在 Ubuntu 上安裝 pip

pip 是一個命令行工具&#xff0c;允許你安裝 Python 編寫的軟件包。 學習如何在 Ubuntu 上安裝 pip 以及如何使用它來安裝 Python 應用程序。有許多方法可以在 Ubuntu 上安裝軟件。 你可以從軟件中心安裝應用程序&#xff0c;也可以從下載的 DEB 文件、PPA(LCTT 譯注&#xff…