成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

jQuery中關(guān)于Ajax的詳解

開發(fā) 前端
本文介紹如何使用jquery實(shí)現(xiàn)Ajax功能. 用于發(fā)送Ajax請(qǐng)求的相關(guān)函數(shù)如load, get, getJSON和post這些漸變Ajax方法, 對(duì)于核心的ajax 方法沒有過(guò)多介紹, 主要是通過(guò)配置復(fù)雜的參數(shù)實(shí)現(xiàn)完全控制Ajax請(qǐng)求。

Ajax讓用戶頁(yè)面豐富起來(lái), 增強(qiáng)用戶體驗(yàn). Ajax是所有Web開發(fā)的必修課. 雖然Ajax技術(shù)并不復(fù)雜, 但是實(shí)現(xiàn)方式還是會(huì)因?yàn)槊總€(gè)開發(fā)人員而有所差異.jQuery提供一系列Ajax函數(shù)來(lái)幫助我們統(tǒng)一這種差異, 并且讓調(diào)用Ajax更加簡(jiǎn)單.jQuery提供了幾個(gè)用于發(fā)送Ajax請(qǐng)求的函數(shù). 其中最核心也是最復(fù)雜的是jQuery.ajax(),所有的其他Ajax函數(shù)都是它的一個(gè)簡(jiǎn)化調(diào)用.當(dāng)我們想要完全控制Ajax時(shí)可以使用此結(jié)果, 否則還是使用簡(jiǎn)化方法如get, post, load等更加方便. 所以jQuery.ajax( options ) 方法放到***一個(gè)介紹. 先來(lái)介紹最簡(jiǎn)單的load方法:

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

Returns: jQuery包裝集說(shuō)明

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

默認(rèn)使用 GET 方式, 如果傳遞了data參數(shù)則使用Post方式.

傳遞附加參數(shù)時(shí)自動(dòng)轉(zhuǎn)換為 POST 方式。jQuery 1.2 中,可以指定選擇符,來(lái)篩選載入的 HTML 文檔,DOM 中將僅插入篩選出的 HTML 代碼。語(yǔ)法形如 "url #some > selector", 默認(rèn)的選擇器是"body>*".

講解:

load是最簡(jiǎn)單的Ajax函數(shù), 但是使用具有局限性:

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

load是一個(gè)jQuery包裝集方法,需要在jQuery包裝集上調(diào)用,并且會(huì)將返回的HTML加載到對(duì)象中, 即使設(shè)置了回調(diào)函數(shù)也還是會(huì)加載。

不過(guò)不可否認(rèn)load接口設(shè)計(jì)巧妙并且使用簡(jiǎn)單.下面通過(guò)示例來(lái)演示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.                 //發(fā)送Get請(qǐng)求  
  14.                 $("#divResult").load("../data/AjaxGetMethod.aspx?param=btnAjaxGet_click" + "&timestamp=" + (new Date()).getTime());  
  15.             });  
  16.  
  17.             $("#btnAjaxPost").click(function(event)  
  18.             {  
  19.                 //發(fā)送Post請(qǐng)求  
  20.                 $("#divResult").load("../data/AjaxGetMethod.aspx", { "param": "btnAjaxPost_click" });  
  21.             });  
  22.  
  23.             $("#btnAjaxCallBack").click(function(event)  
  24.             {  
  25.                 //發(fā)送Post請(qǐng)求, 返回后執(zhí)行回調(diào)函數(shù).  
  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.                 //發(fā)送Get請(qǐng)求, 從結(jié)果中過(guò)濾掉 "鞍山" 這一項(xiàng)  
  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執(zhí)行Get請(qǐng)求</button><br /> 
  45.     <button id="btnAjaxPost">使用Load執(zhí)行Post請(qǐng)求</button><br /> 
  46.     <button id="btnAjaxCallBack">使用帶有回調(diào)函數(shù)的Load方法</button><br /> 
  47.     <button id="btnAjaxFiltHtml">使用selector過(guò)濾返回的HTML內(nèi)容</button> 
  48.     <br /> 
  49.     <div id="divResult"></div> 
  50. </body> 
  51. </html> 

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

提示: 當(dāng)在url參數(shù)后面添加了一個(gè)空格, 比如" "的時(shí)候, 會(huì)出現(xiàn)"無(wú)法識(shí)別符號(hào)"的錯(cuò)誤, 請(qǐng)求還是能正常發(fā)送. 但是無(wú)法加載HTML到DOM. 刪除后問(wèn)題解決.

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

Returns: XMLHttpRequest說(shuō)明:

通過(guò)遠(yuǎn)程 HTTP GET 請(qǐng)求載入信息。

這是一個(gè)簡(jiǎn)單的 GET 請(qǐng)求功能以取代復(fù)雜 $.ajax 。請(qǐng)求成功時(shí)可調(diào)用回調(diào)函數(shù)。如果需要在出錯(cuò)時(shí)執(zhí)行函數(shù),請(qǐng)使用 $.ajax。

講解:

此函數(shù)發(fā)送Get請(qǐng)求, 參數(shù)可以直接在url中拼接, 比如:

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

或者通過(guò)data參數(shù)傳遞:

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

兩種方式效果相同, data參數(shù)會(huì)自動(dòng)添加到請(qǐng)求的url中如果url中的某個(gè)參數(shù), 又通過(guò)data參數(shù)傳遞, 不會(huì)自動(dòng)合并相同名稱的參數(shù).回調(diào)函數(shù)的簽名如下:

  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是返回的數(shù)據(jù), testStatus表示狀態(tài)碼, 可能是如下值:

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

在回調(diào)函數(shù)中的this是獲取options對(duì)象的引用.有關(guān)options的各種說(shuō)明, 請(qǐng)參見:

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

type參數(shù)是指data數(shù)據(jù)的類型, 可能是下面的值:

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

默認(rèn)為"html".

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

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

Returns: XMLHttpRequest

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

說(shuō)明:通過(guò) HTTP GET 請(qǐng)求載入 JSON 數(shù)據(jù)。

在jQuery 1.2 中,您可以通過(guò)使用JSONP 形式的回調(diào)函數(shù)來(lái)加載其他網(wǎng)域的JSON數(shù)據(jù),如 "myurl?callback=?"。jQuery 將自動(dòng)替換 ? 為正確的函數(shù)名,以執(zhí)行回調(diào)函數(shù)。

注意:此行以后的代碼將在這個(gè)回調(diào)函數(shù)執(zhí)行前執(zhí)行。

講解:getJSON函數(shù)僅僅將get函數(shù)的type參數(shù)設(shè)置為"JSON"而已. 在回調(diào)函數(shù)中獲取的數(shù)據(jù)已經(jīng)是按照J(rèn)SON格式解析后的對(duì)象了:

  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> 

服務(wù)器端返回的字符串如下:

  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

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

說(shuō)明:通過(guò) HTTP GET 請(qǐng)求載入并執(zhí)行一個(gè) JavaScript 文件。

jQuery 1.2 版本之前,getScript 只能調(diào)用同域 JS 文件。 1.2中,您可以跨域調(diào)用 JavaScript 文件。注意:Safari 2 或更早的版本不能在全局作用域中同步執(zhí)行腳本。如果通過(guò) getScript 加入腳本,請(qǐng)加入延時(shí)函數(shù)。

講解:

以前我使用dojo類庫(kù)時(shí)官方默認(rèn)的文件不支持跨域***導(dǎo)致我放棄使用dojo(雖然在網(wǎng)上找到了可以跨域的版本, 但是感覺不夠***). 所以我特別對(duì)這個(gè)函數(shù)的核心實(shí)現(xiàn)和使用做了研究.

首先了解此函數(shù)的jQuery內(nèi)部實(shí)現(xiàn), 仍然使用get函數(shù), jQuery所有的Ajax函數(shù)包括get***都是用的是jQuery.ajax(), getScript將傳入值為"script"的type參數(shù), ***在Ajax函數(shù)中對(duì)type為script的請(qǐng)求做了如下處理:

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

上面的代碼動(dòng)態(tài)建立了一個(gè)script語(yǔ)句塊, 并且將其加入到head中:

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

當(dāng)腳本加載完畢后, 再?gòu)膆ead中刪除:

  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

說(shuō)明:通過(guò)遠(yuǎn)程 HTTP POST 請(qǐng)求載入信息。

這是一個(gè)簡(jiǎn)單的 POST 請(qǐng)求功能以取代復(fù)雜 $.ajax 。請(qǐng)求成功時(shí)可調(diào)用回調(diào)函數(shù)。如果需要在出錯(cuò)時(shí)執(zhí)行函數(shù),請(qǐng)使用 $.ajax。

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

6. jQuery.ajax( options )

Returns: XMLHttpRequest

說(shuō)明:通過(guò) HTTP 請(qǐng)求加載遠(yuǎn)程數(shù)據(jù)。

jQuery 底層 AJAX 實(shí)現(xiàn)。簡(jiǎn)單易用的高層實(shí)現(xiàn)見 $.get, $.post 等。

$.ajax() 返回其創(chuàng)建的 XMLHttpRequest 對(duì)象。大多數(shù)情況下你無(wú)需直接操作該對(duì)象,但特殊情況下可用于手動(dòng)終止請(qǐng)求。

$.ajax() 只有一個(gè)參數(shù):參數(shù) key/value 對(duì)象,包含各配置及回調(diào)函數(shù)信息。詳細(xì)參數(shù)選項(xiàng)見下。

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

注意:如果dataType設(shè)置為"script",那么所有的遠(yuǎn)程(不在同一域名下)的POST請(qǐng)求都將轉(zhuǎn)化為GET請(qǐng)求。(因?yàn)閷⑹褂肈OM的script標(biāo)簽來(lái)加載)

jQuery 1.2 中,您可以跨域加載 JSON 數(shù)據(jù),使用時(shí)需將數(shù)據(jù)類型設(shè)置為 JSONP。使用 JSONP 形式調(diào)用函數(shù)時(shí),如 "myurl?callback=?" jQuery 將自動(dòng)替換 ? 為正確的函數(shù)名,以執(zhí)行回調(diào)函數(shù)。數(shù)據(jù)類型設(shè)置為 "jsonp" 時(shí),jQuery 將自動(dòng)調(diào)用回調(diào)函數(shù)。

講解:

這是jQuery中Ajax的核心函數(shù), 上面所有的發(fā)送Ajax請(qǐng)求的函數(shù)內(nèi)部***都會(huì)調(diào)用此函數(shù).options參數(shù)支持很多參數(shù), 使用這些參數(shù)可以完全控制ajax請(qǐng)求. 在Ajax回調(diào)函數(shù)中的this對(duì)象也是options對(duì)象.

因?yàn)槠綍r(shí)使用最多的還是簡(jiǎn)化了的get和post函數(shù), 所以在此不對(duì)options參數(shù)做詳細(xì)講解了. options參數(shù)文檔請(qǐng)見:http://docs.jquery.com/Ajax/jQuery.ajax#options

本文介紹如何使用jquery實(shí)現(xiàn)Ajax功能. 用于發(fā)送Ajax請(qǐng)求的相關(guān)函數(shù)如load, get, getJSON和post這些漸變Ajax方法, 對(duì)于核心的ajax 方法沒有過(guò)多介紹, 主要是通過(guò)配置復(fù)雜的參數(shù)實(shí)現(xiàn)完全控制Ajax請(qǐng)求。

 

責(zé)任編輯:張偉 來(lái)源: phpFuns
相關(guān)推薦

2011-09-01 10:16:43

JQuery Mobi

2009-03-13 09:48:33

ASP.NETAjaxJQuery

2013-12-02 14:40:03

jQueryAjax

2009-04-14 13:36:50

AJAXXMLHttpRequ基礎(chǔ)

2011-01-24 13:20:49

2009-07-22 16:25:41

ASP.NET AJA

2024-10-22 16:54:14

2012-06-07 15:14:52

jQuery

2011-09-14 16:40:44

jQuery

2019-11-07 23:48:12

shell腳本getopts

2011-05-13 09:53:02

strutsAjax

2012-04-27 10:00:43

jQuery插件

2012-07-17 10:54:49

AJAX

2011-08-29 14:59:26

QtEvent事件

2009-09-07 14:41:48

GridView展開與

2011-08-22 16:19:58

jQuery

2024-08-13 15:46:57

2024-08-26 15:13:36

2024-10-11 17:13:14

SQL數(shù)據(jù)庫(kù)查詢數(shù)據(jù)庫(kù)

2009-03-09 09:45:07

MVCAjax.Net
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 欧美一区视频在线 | 黄网站在线观看 | 超碰在线播 | 99久久精品视频免费 | 精品国产青草久久久久福利 | 日本a视频 | 亚洲欧美日韩精品久久亚洲区 | 国产精品久久午夜夜伦鲁鲁 | 久久国产精品一区二区三区 | 国产999精品久久久影片官网 | 久久99国产精一区二区三区 | 国产日韩av一区二区 | 亚洲va欧美va天堂v国产综合 | 春色av| 性欧美精品一区二区三区在线播放 | 精品在线一区 | 日韩欧美在线观看 | 久久久九九九九 | 欧美一级免费看 | 高清一区二区 | 久久亚洲一区 | av第一页 | 一区二区三区在线播放 | 国产福利资源 | 在线看一区二区 | 国产精品成人国产乱一区 | 999re5这里只有精品 | 久久久.com| 国产精品福利网站 | 人人做人人澡人人爽欧美 | 欧美激情va永久在线播放 | 91黄在线观看 | 99国产精品久久久久久久 | 国产精品视频网 | 亚洲国产成人精品女人久久久 | 久草视频在线播放 | 久久一区二区视频 | 中文字幕一级毛片视频 | 在线视频国产一区 | 国产一区二区在线免费播放 | 国产精品视频在线免费观看 |