Ajax (Asynchronous Javascript And XML) 通過在后台與服務器進行少量數據交換,AJAX 可以使網頁實現異步更新。這意味着可以在不重新加載整個網頁的情況下,對網頁的某部分進行更新。
1、Ajax的優勢:
不需要插件的支持,能被大多數主流瀏覽器支持
優秀的用戶體驗,不用刷新整個頁面,就能更新數據
提高web程序的性能,通過XMLHttpRequest對象向服務端提交所需的數據
2、Ajax的核心: XMLHttpRequest 對象, 發送異步請求、接收相應 、執行回調 都是通過它來進行。
3 ajax 請求過程:(JS)
創建 XMLHttpRequest 對象、連接服務器、發送請求、接收響應數據;
1、創建XMLHttpRequest對象:
var xhr = function createXhr(){ if(window.ActiveXObject){ //IE5 IE6 return new window.ActiveXObject("Microsoft.XMLHttp"); }else if(window.XMLHttpRequest){ //IE7 以上 及 其他瀏覽器 return new XMLHttpRequest(); }else{ alert("您的瀏覽器不兼容,換一個"); return null; } }
2、准備向服務端發請求,open()
if(xhr!=null){ //如果實例化成功,就調用open()方法,就開始准備向服務器發送請求 xhr.open("post", url, true); /*三個參數:第一個是發送請求的類型,POST 和GET 兩種 第二個是url的地址,(地址也可以是靜態文件,xml文件) 第三個,是否是異步,true是 異步。false 是同步*/ }
3、回調函數的處理(數據接收的處理)
xhr.onreadystatechange = processResponse; //指定響應函數 function processResponse() { }
4、發送,
xhr.send(); //
注意幾個書寫的順序:
var xhr = createXMLHttpRequest(); xhr.open("GET","test.jsp",true); xhr.OnreadyStateChange = function(){ if(xhr.readyState==4&&xhr.status==200){ //通過responseXML和responeText來獲取信息 var doc = xhr.responseXML;//responseXML只能獲取XML格式 (var doc = xhr.responseText) } } xhr.send();
2、jquery中AJax的實現
1、load();直接為包裝器創建,
$("#content").load(url,[data](數據,可省略),[callback](回調函數,可省略));
如果有第二個,按照POST 方式發送,如果沒有 用 GET 方式發送。
//表示將01 html文件中 id是 test的元素 加載到 content中
$('#content').load("01.html #test");
2、$.get();
$.get(url,[data](數據,可省略),[callback](回調函數,可省略));
3、$.getJson()
4、$.post()
5、$.ajax() $.post、$.get是一些簡單的方法,如果要處理復雜的邏輯,還是需要用到jQuery.ajax()
一、$.ajax的一般格式
$.ajax({ url: "http://www.hzhuti.com", //請求的url地址 dataType: "json", //返回格式為json async: true, //請求是否異步,默認為異步,這也是ajax重要特性 data: { "id": "value" }, //參數值 type: "GET", //請求方式 beforeSend: function() { //請求前的處理 }, success: function(req) { //請求成功時處理 }, complete: function() { //請求完成的處理 }, error: function() { //請求出錯處理 } });
二、$.ajax的參數描述
參數 描述
url | 必需。規定把請求發送到哪個 URL。 |
data | 可選。映射或字符串值。規定連同請求發送到服務器的數據。 |
success(data, textStatus, jqXHR) | 可選。請求成功時執行的回調函數。 |
dataType | 可選。規定預期的服務器響應的數據類型。 默認執行智能判斷(xml、json、script 或 html)。 |
三、一些:
//1.$.ajax帶json數據的異步請求 var aj = $.ajax( { url:'productManager_reverseUpdate',// 跳轉到 action data:{ selRollBack : selRollBack, selOperatorsCode : selOperatorsCode, PROVINCECODE : PROVINCECODE, pass2 : pass2 }, type:'post', cache:false, dataType:'json', success:function(data) { if(data.msg =="true" ){ // view("修改成功!"); alert("修改成功!"); window.location.reload(); }else{ view(data.msg); } }, error : function() { // view("異常!"); alert("異常!"); } }); 在提交中,如果有表單,把表單添加到參數data中,有很多,很麻煩,jquery 提供了 serialize()方法,能將DOM元素序列化為一個字符串 //2.$.ajax序列化表格內容為字符串的異步請求 function noTips(){ var formParam = $("#form1").serialize();//序列化表格內容為字符串 $.ajax({ type:'post', url:'Notice_noTipsNotice', data:formParam, cache:false, dataType:'json', success:function(data){ } }); } //3.$.ajax拼接url的異步請求 var yz=$.ajax({ type:'post', url:'validatePwd2_checkPwd2?password2='+password2, data:{}, cache:false, dataType:'json', success:function(data){ if( data.msg =="false" ) //服務器返回false,就將validatePassword2的值改為pwd2Error,這是異步,需要考慮返回時間 { textPassword2.html("<font color='red'>業務密碼不正確!</font>"); $("#validatePassword2").val("pwd2Error"); checkPassword2 = false; return; } }, error:function(){} }); //4.$.ajax拼接data的異步請求 $.ajax({ url:'<%=request.getContextPath()%>/kc/kc_checkMerNameUnique.action', type:'post', data:'merName='+values, async : false, //默認為true 異步 error:function(){ alert('error'); }, success:function(data){ $("#"+divs).html(data); } });
JQuery 中設置AJAX 的全局函數
var $doc = $(document); $doc.ajaxComplete(function(event,xhr,options){ var str_timeout = xhr.responseText; if ("session_timeout" === str_timeout) { window.top.location = rootPath + "/system/login/login.jsp"; } });
ajaxStart |
在jQuery AJAX函數或命令發起時,但在XHR實例被創建之前 |
類型被設置為ajaxStart的全局回調信息對象 |
ajaxSend |
在XHR實例被創建之后,但在XHR實例被發送給服務器之前 |
類型被設置為ajaxSend的全局回調信息對象;XHR實例;$.ajax()函數使用的屬性 |
ajaxSuccess |
在請求已從服務器返回之后,並且響應包含成功狀態碼 |
類型被設置為ajaxSuccess的全局回調信息對象;XHR實例;$.ajax()函數使用的屬性 |
ajaxError |
在請求已從服務器返回之后,並且響應包含失敗狀態碼 |
類型被設置為ajaxError的全局回調信息對象;XHR實例;$.ajax()函數使用的屬性;被XHR實例返回的異常對象(如果有的話) |
ajaxComplete |
在請求已從服務器返回之后,並且在任何已聲名的ajaxSuccess或ajaxError回調函數已被調用之后 |
類型被設置為ajaxComplete的全局回調信息對象;XHR實例;$.ajax()函數使用的屬性 |
ajaxStop |
在所有其他AJAX處理完成以及任何其他適用的全局回調函數已被調用之后 |
類型被設置為ajaxStop的全局回調信息對象 |
如果在jQuery.ajax()或jQuery.ajaxSetup()中將選項參數global
設為false
,可以禁止該AJAX請求觸發全局的AJAX事件。