網站首頁 編程語言 正文
一、AJAX請求
1、jQuery.ajax(url,[settings]):
通過 HTTP 請求加載遠程數據。
jQuery 底層 AJAX 實現。簡單易用的高層實現見 $.get, $.post 等。$.ajax() 返回其創建的 XMLHttpRequest 對象。大多數情況下你無需直接操作該函數。
Example: 保存數據到服務器,成功時顯示信息。
$.ajax({ type: "POST", url: "some.php", data: { name: "John", location: "Boston" } }).done(function( msg ) { alert( "Data Saved: " + msg ); });
2、ajax選項
-
async?(默認:?
true
):是否為異步請求 -
global?(默認:?
true
):是否觸發全局 AJAX 事件 -
url?(默認:?
當前頁面地址
)“發送請求的地址 -
type?(默認:?
'GET'
):請求方式 ("POST" 或 "GET"),Get時,參數中如果要傳遞中文,則需要用encodeURIComponent(). - data:發送到服務器的數據。可將對象或數組將自動轉換為請求字符串格式。
-
dataType?(默認:?
Intelligent Guess (xml, json, script, or html)
):預期服務器返回的數據類型。如果不指定,jQuery 將自動根據 HTTP 包 MIME 信息來智能判斷,比如XML MIME類型就被識別為XML。 - context:用于設置Ajax相關回調函數的上下文。 默認情況下,這個上下文是一個ajax請求使用的參數設置對象settings。
-
cache?(默認:?
true, dataType為"script"和"jsonp"時默認為false
):如果設置為 false ,瀏覽器將不緩存此頁面。
3、回調函數
如果要處理 $.ajax() 得到的數據,則需要使用回調函數:beforeSend、error、dataFilter、success、complete。
- beforeSend:在發送請求之前調用,并且傳入一個 XMLHttpRequest 作為參數。
- error:在請求出錯時調用。傳入 XMLHttpRequest 對象,描述錯誤類型的字符串以及一個異常對象(如果有的話)
- dataFilter:在請求成功之后調用。傳入返回的數據以及 "dataType" 參數的值。并且必須返回新的數據(可能是處理過的)傳遞給 success 回調函數。
- success:當請求之后調用。傳入返回后的數據,以及包含成功代碼的字符串。
- complete:當請求完成之后調用這個函數,無論成功或失敗。傳入 XMLHttpRequest 對象,以及一個包含成功或錯誤代碼的字符串。
4、GET方法和POST方法的區別
- get是從服務器上獲取數據,get是把參數數據隊列加到URL中,值和表單內各個字段一一對應,在URL中可以看到。(服務器端用Request.QueryString獲取變量的值)
- post是向服務器傳送數據。post是通過HTTP post機制,將參數數據隊列放置在HTML HEADER內一起傳送到URL地址。用戶看不到這個過程。(服務器端用Request.Form獲取提交的數據)
- get傳送的數據量較小,不能大于2KB。post傳送的數據量較大,一般被默認為不受限制。但理論上,IIS4中最大量為80KB,IIS5中為100KB。
- get安全性非常低,post安全性較高,但是執行效率卻比Post方法好。包含機密信息的話,建議用Post數據提交方式;
- 在做數據查詢時,建議用Get方式;而在做數據添加、修改或刪除時,建議用Post方式;
二、AJAX請求快捷方法:
1、.load( url [, data ] [,?callback?] ):
從服務器載入數據并且將返回的 HTML 代碼并插入至 匹配的元素中。
如果提供了 "complete" 回調函數,它將在函數處理完之后,并且 HTML 已經被插入完時被調用。
默認使用 GET 方式 , 如果data參數提供一個對象,那么使用 POST 方式。
舉例:
//1、在一個有序列表中,加載主頁的頁腳導航。 $("#new-nav").load("/ #jq-footerNavigation li"); //2、顯示一個信息如果Ajax請求遭遇一個錯誤 $("#success").load("/not-here.php", function(response, status, xhr) { if (status == "error") { var msg = "Sorry but there was an error: "; $("#error").html(msg + xhr.status + " " + xhr.statusText); } }); //3、發送數組形式的data參數到服務器。 $("#objectID").load("test.php", { 'choices[]': ["Jon", "Susan"] } ); //4、將feeds.html 文件載人到 ID為feeds的DIV. $("#feeds").load("feeds.html");
2、$.get(URL,callback):
通過 HTTP GET 請求從服務器上請求數據。
下面的例子使用 $.get() 方法從服務器上的一個文件中取回數據:
$("button").click(function(){ $.get("demo_test.asp",function(data,status){ alert("Data: " + data + "\nStatus: " + status); }); });
3、$.post(URL,data,callback):
通過 HTTP POST 請求從服務器上請求數據。
下面的例子使用 $.post() 連同請求一起發送數據:
$("button").click(function(){ $.post("demo_test_post.asp", { name:"Donald Duck", city:"Duckburg" }, function(data,status){ alert("Data: " + data + "\nStatus: " + status); }); });
4、$.getJSON(url,data,callback):
通過 HTTP GET 請求載入 JSON 數據。
data數據會被附加到一個查詢字符串的URL中,發送到服務器。如果該值的data
參數是一個普通的對象,它會轉換為一個字符串并使用URL編碼,然后才追加到URL中。
下面的例子從 Flickr JSONP API中加載最近的四張標簽為貓的圖片:
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?", { tags: "mount rainier", tagmode: "any", format: "json" }, function(data) { $.each(data.items, function(i,item){ $("<img/>").attr("src", item.media.m).appendTo("#images"); if ( i == 3 ) return false; }); });
通過test.js加載這個JSON數據,并使用返回的JSON數據中的 name值:
$.getJSON("test.js", function(json) { alert("JSON Data: " + json.users[3].name); });
5、$.getScript( url [,?callback?] ):
使用一個HTTP GET請求從服務器加載并執行一個 JavaScript 文件
載入的腳本在全局環境中執行,因此能夠引用其他變量,并使用 jQuery 函數。被加載的腳本同樣作用于當前頁面.
默認情況下,$.getScript()
?cache選項被設置為?false
。這將在請求的URL的查詢字符串中追加一個時間戳參數,以確保每次瀏覽器下載的腳本被重新請求。
我們動態加載新的官方jQuery 顏色動畫插件,一旦該插件加載完成就會觸發一些顏色動畫。
(function() { var url = "https://raw.github.com/jquery/jquery-color/master/jquery.color.js"; $.getScript(url, function() { $("#go").click(function(){ $(".block") .animate( { backgroundColor: "rgb(255, 180, 180)" }, 1000 ) .delay(500) .animate( { backgroundColor: "olive" }, 1000 ) }); }); })();
三、全局事件
Ajax會觸發很多事件。?
有兩種事件,一種是局部事件,一種是全局事件:
1、局部事件:
通過$.ajax來調用并且分配。
$.ajax({ beforeSend: function(){ // Handle the beforeSend event }, complete: function(){ // Handle the complete event } // ... });
2、全局事件:
可以用bind來綁定,用unbind來取消綁定。
這個跟click/mousedown/keyup等事件類似。但他可以傳遞到每一個DOM元素上。
$("#loading").bind("ajaxSend", function(){ //使用bind $(this).show(); }).ajaxComplete(function(){ //直接使用ajaxComplete $(this).hide(); });
當然,你某一個Ajax請求不希望產生全局的事件,則可以設置global:false
$.ajax({ url: "test.html", global: false, // ... });
全局事件中,除了ajaxStart和ajaxStop之外,其他的事件都有3個參數:event, XMLHttpRequest, ajaxOptions。
3、事件順序
事件發生的順序如下:
- .ajaxStart(全局):在AJAX?請求剛開始時執行一個處理函數.
- beforeSend(局部事件):當一個Ajax請求開始時觸發。如果需要,你可以在這里設置XHR對象。
- .ajaxSend(全局):在Ajax請求發送之前綁定一個要執行的函數.
- success(局部事件):請求成功時觸發。即服務器沒有返回錯誤,返回的數據也沒有錯誤。
- .ajaxSuccess(全局):當 Ajax?請求成功完成時執行。
- error(局部事件):僅當發生錯誤時觸發。你無法同時執行success和error兩個回調函數。
- .ajaxError(全局):Ajax請求出錯時注冊一個回調處理函數。
- complete(局部事件):不管你請求成功還是失敗,即便是同步請求,你都能在請求完成時觸發這個事件。
- .ajaxComplete(全局):當Ajax請求完成后注冊一個回調函數。
- .ajaxStop(全局):在AJAX?請求完成時執行一個處理函數。
舉例:
//當 AJAX 請求開始時,顯示“加載中”的指示: $("div").ajaxStart(function(){ $(this).html("<img src='demo_wait.gif' />"); }); //AJAX 請求結束后隱藏信息: $("#loading").ajaxStop(function(){ $(this).hide(); });
四、$.ajaxSetup( options ) :
設置全局 AJAX 默認選項。
舉例:設置 AJAX 請求默認地址為 "/xmlhttp/",禁止觸發全局 AJAX 事件,用 POST 代替默認 GET 方法。其后的 AJAX 請求不再設置任何選項參數
$.ajaxSetup({ url: "/xmlhttp/", global: false, type: "POST" }); $.ajax({ data: myData });
五、.serialize() 與 .serializeArray():
序列化表單內容
如果要表單元素的值包含到序列字符串中,元素不能被禁用,元素必須使用 name 屬性。
1、.serialize() :
序列化表單內容為字符串。
.serialize() 方法可以操作已選取個別表單元素的 jQuery 對象,比如 <input>, <textarea> 以及 <select>。不過,選擇 <form> 標簽本身進行序列化一般更容易些:
$('form').submit(function() { alert($(this).serialize()); return false; });
輸出標準的查詢字符串:
a=1&b=2&c=3&d=4&e=5
2、.serializeArray() :
序列化表單內容為JSON數組。
serializeArray()輸出標準的查詢JOSN對象:
[ { name: a value: 1 }, { name: b value: 2 }, { name: c value: 3 }, { name: d value: 4 }, { name: e value: 5 } ]
六、利用Jquery獲取后臺代碼或Webservice
注意:1.方法一定要靜態方法,而且要有[WebMethod]的聲明
后臺<C#>:
using System.Web.Script.Services; [WebMethod] public static string SayHello() { return "Hello Ajax!"; }
前臺<JQuery>:
$(function() { $("#btnOK").click(function() { $.ajax({ //要用post方式 type:"Post", //方法所在頁面和方法名 url:location.pathname+"/SayHello", contentType:"application/json; charset=utf-8", dataType:"json", success:function(data) { alert(data.d); //返回的數據用data.d獲取內容 }, error:function(err) { alert(err); } }); //禁用按鈕的提交 return false; }); });
注意:如果方法需要傳參數如:GetStr(string str,string str2),則$.ajax需要增加data:?
"{'str':'我是','str2':'XXX'}"。
七、通過Ajax讀取XML數據
//1、解析XML字符串: var xmlDoc=$.parseXML(“”); //2、封裝XMLDOC: var $xml=$(xmlDoc) //3、判斷是否是XMLDOC: $.isXMLDoc(xmlDoc)==true //4、查詢XML,和查詢HTML語法一致: $.xml.find(“title”).text;$(“title”,$xml).text();
通過Ajax讀取XML數據:
$.ajax({ type: "POST", url: "WebService1.asmx/GetDataSet", data: "{}", dataType: 'xml', //返回的類型為XML ,和前面的Json,不一樣了 success: function (xml) { $(xml).find("Table1").each(function () { $(this).find("ID").text() + " " + $(this).children("title").attr("id")); }); } }); //如果返回的是JOSN文本,則需要使用$.parstJSON(json)或eval("(+json+)")解析
原文鏈接:https://www.cnblogs.com/springsnow/p/9461746.html
相關推薦
- 2022-08-16 C語言超詳細講解函數指針的運用_C 語言
- 2022-10-10 VMware?Workstation與Device/Credential?Guard不兼容的解決_V
- 2022-10-31 理解k8s控制器DaemonSet創建及使用場景_云其它
- 2022-06-18 Asp.Net?Core配置多環境log4net配置文件的全過程_實用技巧
- 2023-04-21 深入理解Python中__init__.py文件_python
- 2022-02-05 ERROR 1205 (HY000): Lock wait timeout exceeded; tr
- 2022-10-01 Python?Color類與文字繪制零基礎掌握_python
- 2022-09-20 react-redux?action傳參及多個state處理的實現_React
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支