日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jQuery中关于Ajax的详解

發(fā)布時(shí)間:2023/12/1 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jQuery中关于Ajax的详解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

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

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

Returns: jQuery包裝集說明

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

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

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

講解:

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

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

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

不過不可否認(rèn)load接口設(shè)計(jì)巧妙并且使用簡單.下面通過示例來演示Load接口的使用:

  • <!DOCTYPE?html?PUBLIC?"-//W3C//DTD?XHTML?1.0?Transitional//EN"?"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">?
  • <html?xmlns="http://www.w3.org/1999/xhtml">?
  • <head>?
  • ????<title>jQuery?Ajax?-?Load</title>?
  • ?
  • ????<script?type="text/javascript"?src="../scripts/jquery-1.3.2-vsdoc2.js"></script>?
  • ?
  • ????<script?type="text/javascript">?
  • ????????$(function() ?
  • ????????{ ?
  • ????????????$("#btnAjaxGet").click(function(event) ?
  • ????????????{ ?
  • ????????????????//發(fā)送Get請(qǐng)求 ?
  • ????????????????$("#divResult").load("../data/AjaxGetMethod.aspx?param=btnAjaxGet_click"?+?"&timestamp="?+?(new?Date()).getTime()); ?
  • ????????????}); ?
  • ?
  • ????????????$("#btnAjaxPost").click(function(event) ?
  • ????????????{ ?
  • ????????????????//發(fā)送Post請(qǐng)求 ?
  • ????????????????$("#divResult").load("../data/AjaxGetMethod.aspx",?{?"param":?"btnAjaxPost_click"?}); ?
  • ????????????}); ?
  • ?
  • ????????????$("#btnAjaxCallBack").click(function(event) ?
  • ????????????{ ?
  • ????????????????//發(fā)送Post請(qǐng)求,?返回后執(zhí)行回調(diào)函數(shù). ?
  • ????????????????$("#divResult").load("../data/AjaxGetMethod.aspx",?{?"param":?"btnAjaxCallBack_click"?},?function(responseText,?textStatus,?XMLHttpRequest) ?
  • ????????????????{ ?
  • ????????????????????responseText?=?"?Add?in?the?CallBack?Function!?<br/>"?+?responseText ?
  • ????????????????????$("#divResult").html(responseText);?//或者:?$(this).html(responseText); ?
  • ????????????????}); ?
  • ????????????}); ?
  • ?
  • ????????????$("#btnAjaxFiltHtml").click(function(event) ?
  • ????????????{ ?
  • ????????????????//發(fā)送Get請(qǐng)求,?從結(jié)果中過濾掉?"鞍山"?這一項(xiàng) ?
  • ????????????????$("#divResult").load("../data/AjaxGetCityInfo.aspx?resultType=html"?+?"&timestamp="?+?(new?Date()).getTime()?+?"?ul>li:not(:contains('鞍山'))"); ?
  • ????????????}); ?
  • ?
  • ????????}) ?
  • ????</script>?
  • ?
  • </head>?
  • <body>?
  • ????<button?id="btnAjaxGet">使用Load執(zhí)行Get請(qǐng)求</button><br?/>?
  • ????<button?id="btnAjaxPost">使用Load執(zhí)行Post請(qǐng)求</button><br?/>?
  • ????<button?id="btnAjaxCallBack">使用帶有回調(diào)函數(shù)的Load方法</button><br?/>?
  • ????<button?id="btnAjaxFiltHtml">使用selector過濾返回的HTML內(nèi)容</button>?
  • ????<br?/>?
  • ????<div?id="divResult"></div>?
  • </body>?
  • </html>?
  • 提示:我們要時(shí)刻注意瀏覽器緩存, 當(dāng)使用GET方式時(shí)要添加時(shí)間戳參數(shù) (net Date()).getTime() 來保證每次發(fā)送的URL不同, 可以避免瀏覽器緩存.

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

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

    Returns: XMLHttpRequest說明:

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

    這是一個(gè)簡單的 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中拼接, 比如:

  • <script>?
  • ????$.get("../data/AjaxGetMethod.aspx?param=btnAjaxGet_click"); ?
  • </script>?
  • 或者通過data參數(shù)傳遞:

  • <script>?
  • ????$.get("../data/AjaxGetMethod.aspx",?{?"param":?"btnAjaxGet2_click"?}); ?
  • </script>?
  • 兩種方式效果相同, data參數(shù)會(huì)自動(dòng)添加到請(qǐng)求的url中如果url中的某個(gè)參數(shù), 又通過data參數(shù)傳遞, 不會(huì)自動(dòng)合并相同名稱的參數(shù).回調(diào)函數(shù)的簽名如下:

  • <script>?
  • function?(data,?textStatus)?{ ?
  • ??//?data?could?be?xmlDoc,?jsonObj,?html,?text,?etc... ?
  • ??this;?//?the?options?for?this?ajax?request ?
  • } ?
  • </script>?
  • 其中data是返回的數(shù)據(jù), testStatus表示狀態(tài)碼, 可能是如下值:

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

    在回調(diào)函數(shù)中的this是獲取options對(duì)象的引用.有關(guān)options的各種說明, 請(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")

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

    在jQuery 1.2 中,您可以通過使用JSONP 形式的回調(diào)函數(shù)來加載其他網(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ì)象了:

  • <script>?
  • ????$.getJSON("../data/AjaxGetCityInfo.aspx",?{?"resultType":?"json"?},?function(data,?textStatus) ?
  • ????{ ?
  • ??????????alert(data.length); ?
  • ??????????alert(data[0].CityName); ?
  • ????}); ?
  • </script>?
  • 服務(wù)器端返回的字符串如下:

  • <script>?
  • ????[{""pkid"":""0997"",""ProvinceId"":""XJ"",""CityName"":""阿克蘇"",""CityNameEn"":""Akesu"",""PostCode"":""843000"",""isHotCity"":false}, ?
  • ?????{""pkid"":""0412"",""ProvinceId"":""LN"",""CityName"":""鞍山"",""CityNameEn"":""Anshan"",""PostCode"":""114000"",""isHotCity"":false}] ?
  • </script>?
  • 4.jQuery.getScript( url, [callback] )

    Returns: XMLHttpRequest

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

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

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

    講解:

    以前我使用dojo類庫時(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)求做了如下處理:

  • <script>?
  • ????var?head?=?document.getElementsByTagName_r("head")[0]; ?
  • ????var?script?=?document.createElement_x("script"); ?
  • ????sscript.src?=?s.url; ?
  • </script>?
  • 上面的代碼動(dòng)態(tài)建立了一個(gè)script語句塊, 并且將其加入到head中:

  • <script>?
  • head.appendChild(script); ?
  • </script>?
  • 當(dāng)腳本加載完畢后, 再從head中刪除:

  • <script>?
  • ????//?Handle?Script?loading ?
  • ????????????????if?(?!jsonp?)?{ ?
  • ????????????????????var?done?=?false; ?
  • ?
  • ????????????????????//?Attach?handlers?for?all?browsers ?
  • ????????????????????scriptscript.onload?=?script.onreadystatechange?=?function(){ ?
  • ????????????????????????if?(?!done?&&?(!this.readyState?|| ?
  • ????????????????????????????????this.readyState?==?"loaded"?||?this.readyState?==?"complete")?)?{ ?
  • ????????????????????????????done?=?true; ?
  • ????????????????????????????success(); ?
  • ????????????????????????????complete(); ??
  • ????????????????????????????//?Handle?memory?leak?in?IE ?
  • ????????????????????????????scriptscript.onload?=?script.onreadystatechange?=?null; ?
  • ????????????????????????????head.removeChild(?script?); ?
  • ????????????????????????} ?
  • ????????????????????}; ?
  • ????????????????} ?
  • </script>?
  • 5. jQuery.post( url, [data], [callback], [type] )

    Returns: XMLHttpRequest

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

    這是一個(gè)簡單的 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

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

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

    $.ajax() 返回其創(chuàng)建的 XMLHttpRequest 對(duì)象。大多數(shù)情況下你無需直接操作該對(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)簽來加載)

    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í)使用最多的還是簡化了的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 方法沒有過多介紹, 主要是通過配置復(fù)雜的參數(shù)實(shí)現(xiàn)完全控制Ajax請(qǐng)求。

    ?

    ?

    轉(zhuǎn)載于:https://www.cnblogs.com/wangxinming/archive/2012/11/10/2763934.html

    總結(jié)

    以上是生活随笔為你收集整理的jQuery中关于Ajax的详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。