使用jQuery處理AJAX請求的基礎學習教程_jquery

來源:互聯網
上載者:User

$.ajax快捷方法

$.get(url,[data],[callback],[type])$.post(url,[data],[callback],[type])

兩種方法請求方式不同,其他方式相同.
參數:url[請求地址],data[請求的資料內容(obj對象)],callback[回呼函數(只能處理請求成功事件)],
type[請求返回資料的編碼格式(預設ContentType指定格式)]

$.get('/test?x=1');$.get('/test',{z:2});$.post('/test',{y:2});$.get('/user',function(data,callbacktype,jqXHR){  data//返回資料  callbacktype//返回資料的狀態資訊(字串)  jqXHR//jQuery封裝的XHR對象});$(selector).load(url,[data],[callback])

將頁面片段載入到selector的容器裡面

$("#content").load('/user');$.getJSON(url,[data],[callback])

如果是JSON資料回調會成功,否則失敗

$.getJSON('/test',{type:1},function(){  console.log(argument)});$.getScript(url,[claaback])

動態載入指令檔

$.gerScript('/js/test.js',function(){  alert(test(1,2));});

$.ajax詳細使用方法

$.ajax(url,[settings]);$.ajax({  url:'/test',  success:function(){    alert('ok');  }});

處理響應結果的回呼函數:
success[成功],error[請求失敗],
statusCode[指明返回的狀態代碼的回呼函數],
complete[請求返回前的回呼函數(處理返回不同狀態代碼的請求)]

$.ajax('/test',{  success:function(data){    console.log(arguments);  },  error:function(jqXHR,textStatus,err){    //jqXHR:jQuery增強XHR    //textStatus:請求完成狀態    //err:底層通過throw拋出的異常對象,類型與值與錯誤類型有關    console.log(arguments);  },  complete:function(jqXHR,textStatus){    //jqXHR:jQuery增強XHR    //textStatus:請求完成狀態success | error    console.log(arguments);  },  statusCode:function(){    '403':function(jqXHR,textStatus,err){      //jqXHR:jQuery增強XHR      //textStatus:請求完成狀態      //err:底層通過throw拋出的異常對象,類型與值與錯誤類型有關      console.log(arguments);      console.log(400);    },    '400':function(){      console.log(400);    }  }   });

請求的資料:data,processData,contentType,traditional

$.ajax('/test',{  //請求的資料內容  data:{    a:1,    b:2  },  //請求的方式  type:'POST',  //是否對請求的資料進行轉碼(用於傳輸資料為html節點內容)  processData:true,  //當前的資料是否使用傳統方式進行url編碼  traditional:true,  //請求資料編碼格式  contentType:'application/json'});

響應資料:dataType,dataFilter

$.ajax('/test',{  success:function(data){    console.log(typeof data)  },  //定義的返回資料的類型  dataType:'json | html | text | jsonp | script',  //返回底層的未經處理資料進行預先處理  dataFilter:function(data,type){    //data:未經處理資料    //type:指定的資料類型  }  });

前置處理:beforeSend

$.ajax('/test',{  beforeSend:function(jqXHR,settings){    console.log(arguments);    jqXHR.setRequestHeader('test','haha');    jqXHR.testData = {a:1,b:2};  },  complete:function(jqXHR){    console.log(jqXHR.testData)  }});

請求類型:GET(預設) | POST | PUT | DELETE
同步非同步:async(預設true)
是否緩衝:cache(預設true)
其他參數:
1.global[是否觸發全域事件]
2.ifModifed[僅在伺服器資料改變時候載入資料]
3.username,password[http需要驗證時候]
4.timeout[佈建要求逾時時間,若請求逾時觸發error]
5.context[回調中this指向的對象]
其他相關的API

$.ajaxSetup(option)

設定全域預設參數

//預設為get請求$.ajax('/test');//修改全域請求方式為post$.ajaxSetup({  type:'post',  headers:{    test:new Date().getTime  },  cache:false});//請求方式改變為post$.ajax('/test');$.ajaxPrefilter([dataTypes],handler(option,originalOptions,jqXHR))

請求發起前的預先處理,提供了一種AOP(面向切面)編程模式,常見用途:
1.根據option設定執行特定處理邏輯
2.修改option值改變請求預設行為
3.通過return修改預設dataType

例:通過return修改預設dataType

$.ajaxPrefilter('text html json',function(options,originalOptions,jqXHR){  //options請求參數,含預設值  //originalOptions請求時傳入的參數,不含預設值  //jqXHR:jQuery增強XHR  console.log(arguments);  if(options.url == '/test'){    return 'text';  }});$.ajax('/test',{  type:'post',  dataType:'text',  //自訂屬性  test:'haha'});

例:多次請求僅最後一次有效,避免多次請求導致的資料混亂

var requests = {};$.ajaxPrefilter(function(options,originalOptions,jqXHR){  if(requests[options.url]){    requests[options.url].abort();  }  requests[options.url] = jqXHR;});$.ajax('/test/');$.ajax('/test/');

例:統一修改請求路徑

$.ajaxPrefilter(function(options){  if(options.url.substr(0,5) == '/usr'){    options.url = options.url.replace('/usr/','/user/');    options.header = {      a:1    }  }});$.ajax('/usr/');

全域事件

jQuery-1.9以後,全域事件必須綁定在document上

$(document).ajaxSuccess(globalEventHander);$(document).ajaxError(globalEventHander);$(document).ajaxComplete(globalEventHander);$(document).ajaxStart(globalEventHander);$(document).ajaxStop(globalEventHander);$(document).ajaxSend(globalEventHander);function globalEventHander(event){  console.log(arguments);  console.log(event.type);}$.ajax('/test?err=y');//請求成功$.ajax('/test?err=n');//請求失敗//請求順序://ajaxStart >> ajaxSend >> ajaxSend >> ajaxSuccess >> ajaxComplete >> ajaxError >> ajaxComplete >> ajaxStop

序列化

1.param[序列化一個 key/value 對象]
2.serialize[通過序列化表單值,建立 URL 編碼文本字串]
3.serializeArray[通過序列化表單值來建立對象數組(名稱和值)]

例:param()

var params = { a:1, b:2 };var str = $.param(params);console.log(str);//a=1&b=2"

例:serialize()

<form>  <div><input type="text" name="a" value="1"/></div>  <div><input type="text" name="b" value="2"/></div>  <div><input type="hidden" name="c" value="3"/></div></form><script type="text/javascript">  $('form').submit(function() {   console.log($(this).serialize());   //a=1&b=2&c=3   return false;  });</script>

例:serializeArray()

<form>  First:<input type="text" name="First" value="1" /><br />  Last :<input type="text" name="Last" value="2" /><br /></form><script type="text/javascript">  $('form').click(function(){    x=$("form").serializeArray();    console.log(x);    //{[name:First,value:1],[name:Last,value:2]}  });</script>

ajax鏈式編程方法
在開發的過程,經常會遇到一些耗時間的操作,比如ajax讀取伺服器資料(非同步作業),遍曆一個很大的數組(同步操作)。不管是非同步作業,還是同步操作,總之就是不能立即得到結果,JS是單線程語音,不能立即得到結果,便會一直等待(阻塞)。

一般的做法就是用回呼函數(callback),即事先定義好一個函數,JS引擎不等待這些耗時的操作,而是繼續執行下面的代碼,等這些耗時操作結束後,回來執行事先定義好的那個函數。如下面的ajax代碼:

$.ajax({  url: "test.html",  success: function(){    console.log("success");  },  error: function(){    console.log("error");  }});

但這樣寫不夠強大靈活,也很囉嗦。為此,jQuery1.5版本引入Deferred功能,為處理事件回調提供了更加強大而靈活的編程模式。

$.ajax("test.html").done(  function(){    console.log("success");  }).fail(  function(){    console.log("error");  });

不就是鏈式調用嘛,有何優點?

優點一:可以清晰指定多個回呼函數

function fnA(){...}function fnB(){...}$.ajax("test.html").done(fnA).done(fnB);

試想一下,如果用以前的編程模式,只能這麼寫:

function fnA(){...}function fnB(){...}$.ajax({  url: "test.html",  success: function(){    fnA();    fnB();  }});

優點二:為多個操作指定回呼函數

$.when($.ajax("test1.html"), $.ajax("test2.html")).done(function(){console.log("success");}).fail(function(){console.log("error");});

用傳統的編程模式,只能重複寫success,error等回調了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.