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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

从零开始学习jQuery (六) AJAX快餐

發(fā)布時(shí)間:2025/3/21 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从零开始学习jQuery (六) AJAX快餐 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本系列文章導(dǎo)航

從零開始學(xué)習(xí)jQuery (一) 開天辟地入門篇

從零開始學(xué)習(xí)jQuery (二) 萬能的選擇器

從零開始學(xué)習(xí)jQuery (三) 管理jQuery包裝集

從零開始學(xué)習(xí)jQuery (四) 使用jQuery操作元素的屬性與樣式

從零開始學(xué)習(xí)jQuery (五) 事件與事件對象

從零開始學(xué)習(xí)jQuery (六) jQuery中的Ajax

從零開始學(xué)習(xí)jQuery (七) jQuery動畫-讓頁面動起來!

從零開始學(xué)習(xí)jQuery (八) 插播:jQuery實(shí)施方案

從零開始學(xué)習(xí)jQuery (九) jQuery工具函數(shù)

從零開始學(xué)習(xí)jQuery (十) jQueryUI常用功能實(shí)戰(zhàn)

從零開始學(xué)習(xí)jQuery (十一) 實(shí)戰(zhàn)表單驗(yàn)證與自動完成提示插件

?

?

一.摘要

本系列文章將帶您進(jìn)入jQuery的精彩世界, 其中有很多作者具體的使用經(jīng)驗(yàn)和解決方案,? 即使你會使用jQuery也能在閱讀中發(fā)現(xiàn)些許秘籍.

本篇文章講解如何使用jQuery方便快捷的實(shí)現(xiàn)Ajax功能.統(tǒng)一所有開發(fā)人員使用Ajax的方式.

?

二.前言

Ajax讓用戶頁面豐富起來, 增強(qiáng)了用戶體驗(yàn). 使用Ajax是所有Web開發(fā)的必修課. 雖然Ajax技術(shù)并不復(fù)雜, 但是實(shí)現(xiàn)方式還是會因?yàn)槊總€(gè)開發(fā)人員的而有所差異.jQuery提供了一系列Ajax函數(shù)來幫助我們統(tǒng)一這種差異, 并且讓調(diào)用Ajax更加簡單.

?

三.原始Ajax與jQuery中的Ajax

首先通過實(shí)例, 來看一下jQuery實(shí)現(xiàn)Ajax有多簡單. 下面是一個(gè)使用原始Ajax的示例:

<!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</title><script type="text/javascript">$(function(){var xhr = new AjaxXmlHttpRequest();$("#btnAjaxOld").click(function(event){var xhr = new AjaxXmlHttpRequest();xhr.onreadystatechange = function(){if (xhr.readyState == 4){document.getElementById("divResult").innerHTML = xhr.responseText;}}xhr.open("GET", "data/AjaxGetCityInfo.aspx?resultType=html", true);xhr.send(null);});})//跨瀏覽器獲取XmlHttpRequest對象function AjaxXmlHttpRequest(){var xmlHttp;try{// Firefox, Opera 8.0+, SafarixmlHttp = new XMLHttpRequest();}catch (e){// Internet Explorertry{xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");}catch (e){try{xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");}catch (e){alert("您的瀏覽器不支持AJAX!");return false;}}}return xmlHttp;} </script></head> <body> <button id="btnAjaxOld">原始Ajax調(diào)用</button><br /><br /><div id="divResult"></div> </body> </html>

上面的實(shí)例中, data/AjaxGetCityInfo.aspx?resultType=html 地址會返回一段HTML代碼.

使用原始Ajax, 我們需要做較多的事情, 比如創(chuàng)建XmlHttpRequest對象,? 判斷請求狀態(tài), 編寫回調(diào)函數(shù)等.

而用jQuery的Load方法, 只需要一句話:

$("#divResult").load("data/AjaxGetCityInfo.aspx", { "resultType": "html" });

?

曾經(jīng)我是一個(gè)原始Ajax的絕對擁護(hù)者, 甚至摒棄微軟的Asp.net Ajax, 因?yàn)槲蚁胍罡叩拇a靈活度. 使用原始Ajax讓我感覺完成自己的工作更加輕松, 即使多寫了一些代碼. 但是當(dāng)我去翻看別人的Ajax代碼并且嘗試修改的時(shí)候, 我改變了我的看法--我們的代碼到處分布著創(chuàng)建XmlHttpRequest方法的函數(shù), 或者某些Ajax程序邏輯性和結(jié)構(gòu)性很差, 很難看懂.

我們可以將通用方法放到一個(gè)js文件中, 然后告訴大家"嘿伙伴們, 都來用這個(gè)js中的方法". 但是在某些時(shí)候有些新來的外包人員并不知道有這個(gè)js文件的存在. 而且其實(shí)這個(gè)通用的js就是一個(gè)公共的腳本類庫,? 我相信沒有人會覺得自己開發(fā)一個(gè)類庫會比jQuery更好!

所以我放棄了制造輪子的計(jì)劃,? 大家都使用jQuery編寫Ajax相關(guān)的方法就可以解決各種差異性問題, 并且讓工作更有效率.

現(xiàn)在只是用jQuery的Ajax函數(shù), 我的頁面變得簡潔了:?

<!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</title><script type="text/javascript" src="scripts/jquery-1.3.2-vsdoc2.js"></script><script type="text/javascript">$(function(){ $("#btnAjaxJquery").click(function(event){$("#divResult").load("data/AjaxGetCityInfo.aspx", { "resultType": "html" });}); }) </script> </head> <body> <button id="btnAjaxJquery">使用jQuery的load方法</button><br /><div id="divResult"></div> </body> </html>

?

四.jQuery Ajax詳解


jQuery提供了幾個(gè)用于發(fā)送Ajax請求的函數(shù). 其中最核心也是最復(fù)雜的是jQuery.ajax( options ),所有的其他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í)自動轉(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)用,并且會將返回的HTML加載到對象中, 即使設(shè)置了回調(diào)函數(shù)也還是會加載.
  • 不過不可否認(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請求$("#divResult").load("../data/AjaxGetMethod.aspx?param=btnAjaxGet_click" + "&timestamp=" + (new Date()).getTime());});$("#btnAjaxPost").click(function(event){//發(fā)送Post請求$("#divResult").load("../data/AjaxGetMethod.aspx", { "param": "btnAjaxPost_click" });});$("#btnAjaxCallBack").click(function(event){//發(fā)送Post請求, 返回后執(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請求, 從結(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請求</button><br /><button id="btnAjaxPost">使用Load執(zhí)行Post請求</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>

    ?

    上面的示例演示了如何使用Load方法.

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

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

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

    Returns:?XMLHttpRequest

    說明:

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

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

    講解:

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

    $.get("../data/AjaxGetMethod.aspx?param=btnAjaxGet_click");

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

    $.get("../data/AjaxGetMethod.aspx", { "param": "btnAjaxGet2_click" }); ?

    兩種方式效果相同, data參數(shù)會自動添加到請求的url中

    如果url中的某個(gè)參數(shù), 又通過data參數(shù)傳遞, 不會自動合并相同名稱的參數(shù).

    回調(diào)函數(shù)的簽名如下:

    function (data, textStatus) {// data could be xmlDoc, jsonObj, html, text, etc...this; // the options for this ajax request }


    其中data是返回的數(shù)據(jù), testStatus表示狀態(tài)碼, 可能是如下值:

    "timeout","error","notmodified","success","parsererror" 在回調(diào)函數(shù)中的this是獲取options對象的引用.有關(guān)options的各種說明, 請參見: 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 請求載入 JSON 數(shù)據(jù)。

    在 jQuery 1.2 中,您可以通過使用JSONP?形式的回調(diào)函數(shù)來加載其他網(wǎng)域的JSON數(shù)據(jù),如 "myurl?callback=?"。jQuery 將自動替換 ? 為正確的函數(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格式解析后的對象了:

    $.getJSON("../data/AjaxGetCityInfo.aspx", { "resultType": "json" }, function(data, textStatus) {alert(data.length);alert(data[0].CityName); });

    ?

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

    [{""pkid"":""0997"",""ProvinceId"":""XJ"",""CityName"":""阿克蘇"",""CityNameEn"":""Akesu"",""PostCode"":""843000"",""isHotCity"":false},{""pkid"":""0412"",""ProvinceId"":""LN"",""CityName"":""鞍山"",""CityNameEn"":""Anshan"",""PostCode"":""114000"",""isHotCity"":false}]

    ?

    示例中我返回的餓是一個(gè)數(shù)組, 使用data.length可以獲取數(shù)組的元素個(gè)數(shù),? data[0]訪問第一個(gè)元素, data[0].CityName訪問第一個(gè)元素的CityName屬性.

    ?

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

    Returns:?XMLHttpRequest

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

    說明:

    通過 HTTP GET 請求載入并執(zhí)行一個(gè) JavaScript 文件。

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

    講解:

    以前我使用dojo類庫時(shí)官方默認(rèn)的文件不支持跨域最后導(dǎo)致我放棄使用dojo(雖然在網(wǎng)上找到了可以跨域的版本, 但是感覺不夠完美).? 所以我特別對這個(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ù)中對type為script的請求做了如下處理:

    var head = document.getElementsByTagName("head")[0]; var script = document.createElement("script"); script.src = s.url;


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

    head.appendChild(script);


    當(dāng)腳本加載完畢后, 再從head中刪除:

    // Handle Script loadingif ( !jsonp ) {var done = false;// Attach handlers for all browsersscript.onload = script.onreadystatechange = function(){if ( !done && (!this.readyState ||this.readyState == "loaded" || this.readyState == "complete") ) {done = true;success();complete();// Handle memory leak in IEscript.onload = script.onreadystatechange = null;head.removeChild( script );}};}


    我主要測試了此函數(shù)的跨域訪問和多瀏覽器支持.下面是結(jié)果:

    IE6 FireFox 注意事項(xiàng)
    非跨域引用js 通過 通過 回調(diào)函數(shù)中的data和textStatus均可用
    跨域引用js 通過 通過 回調(diào)函數(shù)中的data和textStatus均為undifined

    ?

    下面是我關(guān)鍵的測試語句, 也用來演示如何使用getScript函數(shù):

    $("#btnAjaxGetScript").click(function(event){$.getScript("../scripts/getScript.js", function(data, textStatus){alert(data);alert(textStatus);alert(this.url);});});$("#btnAjaxGetScriptCross").click(function(event){$.getScript("http://resource.elong.com/getScript.js", function(data, textStatus){alert(data);alert(textStatus);alert(this.url);});}); ?


    ?

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

    Returns:?XMLHttpRequest

    說明:

    通過遠(yuǎn)程 HTTP POST 請求載入信息。

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

    講解:

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


    6.?jQuery.ajax( options )

    Returns:?XMLHttpRequest

    說明:

    通過 HTTP 請求加載遠(yuǎn)程數(shù)據(jù)。

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

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

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

    注意:?如果你指定了 dataType 選項(xià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請求都將轉(zhuǎn)化為GET請求。(因?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 將自動替換 ? 為正確的函數(shù)名,以執(zhí)行回調(diào)函數(shù)。數(shù)據(jù)類型設(shè)置為 "jsonp" 時(shí),jQuery 將自動調(diào)用回調(diào)函數(shù)。

    講解:

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

    因?yàn)槠綍r(shí)使用最多的還是簡化了的get和post函數(shù), 所以在此不對options參數(shù)做詳細(xì)講解了. options參數(shù)文檔請見:

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

    ?

    五.Ajax相關(guān)函數(shù).

    jQuery提供了一些相關(guān)函數(shù)能夠輔助Ajax函數(shù).

    1.?jQuery.ajaxSetup( options )

    無返回值

    說明:

    設(shè)置全局 AJAX 默認(rèn)options選項(xiàng)。

    講解:

    有時(shí)我們的希望設(shè)置頁面上所有Ajax屬性的默認(rèn)行為.那么就可以使用此函數(shù)設(shè)置options選項(xiàng), 此后所有的Ajax請求的默認(rèn)options將被更改.

    options是一個(gè)對象, 可以設(shè)置的屬性請此連接:http://docs.jquery.com/Ajax/jQuery.ajax#toptions

    比如在頁面加載時(shí), 我使用下面的代碼設(shè)置Ajax的默認(rèn)option選項(xiàng):

    $.ajaxSetup({url: "../data/AjaxGetMethod.aspx",data: { "param": "ziqiu.zhang" },global: false,type: "POST",success: function(data, textStatus) { $("#divResult").html(data); }});

    上面的代碼設(shè)置了一個(gè)Ajax請求需要的基本數(shù)據(jù): 請求url, 參數(shù), 請求類型, 成功后的回調(diào)函數(shù).

    此后我們可以使用無參數(shù)的get(), post()或者ajax()方法發(fā)送ajax請求.完整的示例代碼如下:

    <!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">$(document).ready(function(){$.ajaxSetup({url: "../data/AjaxGetMethod.aspx",data: { "param": "ziqiu.zhang" },global: false,type: "POST",success: function(data, textStatus) { $("#divResult").html(data); }});$("#btnAjax").click(function(event) { $.ajax(); });$("#btnGet").click(function(event) { $.get(); });$("#btnPost").click(function(event) { $.post(); });$("#btnGet2").click(function(event) { $.get("../data/AjaxGetMethod.aspx",{ "param": "other" }); });});</script></head> <body> <button id="btnAjax">不傳遞參數(shù)調(diào)用ajax()方法</button><br /><button id="btnGet">不傳遞參數(shù)調(diào)用get()方法</button><br /><button id="btnPost">不傳遞參數(shù)調(diào)用post()方法</button><br /><button id="btnGet2">傳遞參數(shù)調(diào)用get()方法, 使用全局的默認(rèn)回調(diào)函數(shù)</button><br /><br /><div id="divResult"></div> </body> </html>

    注意當(dāng)使用get()或者post()方法時(shí), 除了type參數(shù)將被重寫為"GET"或者"POST"外, 其他參數(shù)只要不傳遞都是使用默認(rèn)的全局option. 如果傳遞了某一個(gè)選項(xiàng), 比如最后一個(gè)按鈕傳遞了url和參數(shù), 則本次調(diào)用會以傳遞的選項(xiàng)為準(zhǔn). 沒有傳遞的選項(xiàng)比如回調(diào)函數(shù)還是會使用全局option設(shè)置值.

    ?

    2.serialize( )

    Returns:?String

    說明:

    序列表表格內(nèi)容為字符串,用于 Ajax 請求。

    序列化最常用在將表單數(shù)據(jù)發(fā)送到服務(wù)器端時(shí). 被序列化后的數(shù)據(jù)是標(biāo)準(zhǔn)格式, 可以被幾乎所有的而服務(wù)器端支持.

    為了盡可能正常工作, 要求被序列化的表單字段都有name屬性, 只有一個(gè)eid是無法工作的.

    像這樣寫name屬性:

    <input id="email" name="email" type="text" />


    講解:

    serialize()函數(shù)將要發(fā)送給服務(wù)器的form中的表單對象拼接成一個(gè)字符串. 便于我們使用Ajax發(fā)送時(shí)獲取表單數(shù)據(jù). 這和一個(gè)From按照Get方式提交時(shí), 自動將表單對象的名/值放到url上提交差不多.

    比如這樣一個(gè)表單:

    生成的字符串為:single=Single&param=Multiple&param=Multiple3&check=check2&radio=radio1

    提示:代碼見?chapter6\7-serialize.htm

    3.serializeArray( )

    Returns:?Array<Object>

    說明:

    序列化表格元素 (類似 '.serialize()' 方法) 返回 JSON 數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)。

    注意,此方法返回的是JSON對象而非JSON字符串。需要使用插件或者第三方庫進(jìn)行字符串化操作。

    講解:

    看說明文檔讓我有所失望, 使用此函數(shù)獲取到的是JSON對象, 但是jQuery中沒有提供將JSON對象轉(zhuǎn)化為JSON字符串的方法.

    在JSON官網(wǎng)上沒有找到合適的JSON編譯器, 最后選用了jquery.json這個(gè)jQuery插件:

    http://code.google.com/p/jquery-json/

    使用起來異常簡單:

    var thing = {plugin: 'jquery-json', version: 1.3}; var encoded = $.toJSON(thing); //'{"plugin": "jquery-json", "version": 1.3}' var name = $.evalJSON(encoded).plugin; //"jquery-json" var version = $.evalJSON(encoded).version; // 1.3

    ?

    使用serializeArray( )?再配合?$.toJSON?方法, 我們可以很方便的獲取表單對象的JSON, 并且轉(zhuǎn)換為JSON字符串:

    $("#results").html( $.toJSON( $("form").serializeArray() ));


    結(jié)果為:

    [{"name": "single", "value": "Single"}, {"name": "param", "value": "Multiple"}, {"name": "param", "value": "Multiple3"}, {"name": "check", "value": "check2"}, {"name": "radio", "value": "radio1"}]

    ?

    ?

    六.全局Ajax事件

    在jQuery.ajaxSetup( options )?中的options參數(shù)屬性中, 有一個(gè)global屬性:

    global

    類型:布爾值

    默認(rèn)值:?true

    說明:是否觸發(fā)全局的Ajax事件.

    這個(gè)屬性用來設(shè)置是否觸發(fā)全局的Ajax事件. 全局Ajax事件是一系列伴隨Ajax請求發(fā)生的事件.主要有如下事件:

    名稱 說明
    ajaxComplete( callback ) AJAX 請求完成時(shí)執(zhí)行函數(shù)
    ajaxError( callback ) AJAX 請求發(fā)生錯(cuò)誤時(shí)執(zhí)行函數(shù)
    ajaxSend( callback ) AJAX 請求發(fā)送前執(zhí)行函數(shù)
    ajaxStart( callback ) AJAX 請求開始時(shí)執(zhí)行函數(shù)
    ajaxStop( callback ) AJAX 請求結(jié)束時(shí)執(zhí)行函數(shù)
    ajaxSuccess( callback ) AJAX 請求成功時(shí)執(zhí)行函數(shù)

    ?

    用一個(gè)示例講解各個(gè)事件的觸發(fā)順序:

    <!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 - AjaxEvent</title><script type="text/javascript" src="../scripts/jquery-1.3.2.min.js"></script><script type="text/javascript">$(document).ready(function(){$("#btnAjax").bind("click", function(event){$.get("../data/AjaxGetMethod.aspx");})$("#divResult").ajaxComplete(function(evt, request, settings) { $(this).append('<div>ajaxComplete</div>'); })$("#divResult").ajaxError(function(evt, request, settings) { $(this).append('<div>ajaxError</div>'); })$("#divResult").ajaxSend(function(evt, request, settings) { $(this).append('<div>ajaxSend</div>'); })$("#divResult").ajaxStart(function() { $(this).append('<div>ajaxStart</div>'); })$("#divResult").ajaxStop(function() { $(this).append('<div>ajaxStop</div>'); })$("#divResult").ajaxSuccess(function(evt, request, settings) { $(this).append('<div>ajaxSuccess</div>'); })});</script></head> <body> <br /><button id="btnAjax">發(fā)送Ajax請求</button><br/><div id="divResult"></div> </body> </html>


    結(jié)果如圖:

    我們可以通過將默認(rèn)options的global屬性設(shè)置為false來取消全局Ajax事件的觸發(fā).

    ?

    七.注意事項(xiàng)

    如果在Get請求發(fā)送的url中有兩個(gè)同名參數(shù), 比如兩個(gè)param參數(shù):

    http://localhost/AjaxGetMethod.aspx?param=Multiple&param=Multiple3

    使用服務(wù)器端方法獲取param參數(shù):

    if (!String.IsNullOrEmpty(HttpContext.Current.Request["Param"])){param = HttpContext.Current.Request["Param"];}

    此時(shí)獲取到得param是一個(gè)用","分隔多個(gè)值的字符串:

    Multiple,Multiple3

    ??

    八.總結(jié)

    本文介紹如何使用jquery實(shí)現(xiàn)Ajax功能.? 用于發(fā)送Ajax請求的相關(guān)函數(shù)如load, get, getJSON和post這些漸變Ajax方法, 對于核心的ajax 方法沒有過多介紹, 主要是通過配置復(fù)雜的參數(shù)實(shí)現(xiàn)完全控制Ajax請求. 另外講解了ajax的輔助函數(shù)比如用于序列化表單對象為字符串的serialize()方法, 用于將表單對象序列化為JSON對象的serializeArray()方法. 這些在使用腳本獲取數(shù)據(jù)實(shí)現(xiàn)與服務(wù)器端交互是很有用, JSON格式的數(shù)據(jù)在處理大對象編程時(shí)將我們從混亂的屬性字符串中解放出來.

    jQuery還提供錄入全局ajax事件這一個(gè)特殊的事件, 并且可以在一個(gè)對象上設(shè)置這些事件, 在發(fā)送Ajax請求的各個(gè)生命周期上會調(diào)用這些事件, 可以通過修改默認(rèn)的options對象的global屬性打開或關(guān)閉全局事件.

    目前本系列文章在加緊創(chuàng)作階段. 所以代碼和文章示例都沒有來得及重新整理. 下面是本章的代碼下載, 但是含有所有以前未整理的示例,請大家下載后看chapter6文件夾, 里面是本章的所有示例:

    http://files.cnblogs.com/zhangziqiu/Code-jQueryStudy.rar

    作者:張子秋
    出處:http://www.cnblogs.com/zhangziqiu/

    總結(jié)

    以上是生活随笔為你收集整理的从零开始学习jQuery (六) AJAX快餐的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 夫妻自拍偷拍 | 亚洲色图婷婷 | 性xxxxbbbb | 老色批网站 | 黄色成人影视 | 日日爱视频| 亚洲自拍偷拍在线 | 亚洲女同女同女同女同女同69 | 国产精品午夜在线 | 亚洲成人久久久 | 免费在线亚洲 | 中文字幕第6页 | 欧美精品一级二级 | 国产无遮挡裸体免费视频 | 欧美一区二区三区免 | 亚洲精品日产精品乱码不卡 | 亚洲精品久久久久久宅男 | 中文字幕+乱码+中文乱码www | 在线污视频 | 99视频网址 | 日本少妇毛茸茸高潮 | 国产免费看黄 | 原创真实夫妻啪啪av | 一级片观看 | 日本在线视频免费观看 | 国产精品一区二区在线播放 | 成人污在线 | 干骚视频 | a√天堂网 | 色综合久久久 | 徐锦江一级淫片免费看 | 成人精品福利 | 国产精品极品白嫩在线 | 一区二区三区久久久 | 懂色tv | 牛牛电影国产一区二区 | 欧美福利专区 | 97碰碰碰 | 日本特级黄色片 | 亚洲欧美日韩国产成人精品影院 | 天天射av| 亚洲系列| 91桃色污| 中文字幕在线字幕中文 | 一级黄色性视频 | 护士人妻hd中文字幕 | 欧美在线观看视频一区 | 好吊妞精品视频 | 日韩国产精品一区二区三区 | 久久久国产一区二区三区 | 国模私拍视频在线 | 欧美一区成人 | 欧美二区在线观看 | 亚洲激情自拍 | 校园春色综合 | 96超碰在线| 91av高清| 日韩经典av | 激情丁香 | 青青草久| 三大队在线观看 | 97超碰自拍 | 日本在线免费播放 | 国产精品一区二区网站 | 天天躁夜夜躁狠狠躁 | 北条麻妃av在线 | 中文字幕永久在线观看 | 日本一区二区三区四区视频 | 国产精华一区二区三区 | 亚洲一区二区三区四区电影 | 黄片毛片在线观看 | 美女被草| 黄色天堂| 黄色仓库av| 男人天堂网在线视频 | 福利视频三区 | 巨胸爆乳美女露双奶头挤奶 | 欧美一区日韩一区 | 嫩草视频在线观看视频 | 欧美高清视频一区二区 | 日韩欧美爱爱 | 北条麻妃青青久久 | 成人黄色大片 | av电影中文字幕 | 日本理论片 | 国产又粗又猛又黄又爽 | 亲子乱aⅴ一区二区三区 | 黄床大片 | va欧美| 日韩国产欧美精品 | h网址在线观看 | 精品精品视频 | 日本xxxxxⅹxxxx69 | 一区二区三区不卡在线观看 | av天堂一区 | 99re6这里只有精品 | 欧美激情精品 | 国产精品久久久毛片 | 欧美在线精品一区二区三区 |