最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用jQuery處理AJAX請(qǐng)求的基礎(chǔ)學(xué)習(xí)教程

 更新時(shí)間:2016年05月10日 16:46:47   作者:劉健超 J.c  
這篇文章主要介紹了使用jQuery處理AJAX請(qǐng)求的基礎(chǔ)學(xué)習(xí)教程,除此之外還引申了鏈?zhǔn)教幚硎录卣{(diào)的寫(xiě)法,由淺入深非常值得借鑒,需要的朋友可以參考下

$.ajax快捷方法

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

兩種方法請(qǐng)求方式不同,其他方式相同.
參數(shù):url[請(qǐng)求地址],data[請(qǐng)求的數(shù)據(jù)內(nèi)容(obj對(duì)象)],callback[回調(diào)函數(shù)(只能處理請(qǐng)求成功事件)],
type[請(qǐng)求返回?cái)?shù)據(jù)的編碼格式(默認(rèn)ContentType指定格式)]

$.get('/test?x=1');
$.get('/test',{z:2});
$.post('/test',{y:2});
$.get('/user',function(data,callbacktype,jqXHR){
  data//返回?cái)?shù)據(jù)
  callbacktype//返回?cái)?shù)據(jù)的狀態(tài)信息(字符串)
  jqXHR//jQuery封裝的XHR對(duì)象
});
$(selector).load(url,[data],[callback])

將頁(yè)面片段載入到selector的容器里面

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

如果是JSON數(shù)據(jù)回調(diào)會(huì)成功,否則失敗

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

動(dòng)態(tài)加載腳本文件

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

$.ajax詳細(xì)使用方法

$.ajax(url,[settings]);

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

處理響應(yīng)結(jié)果的回調(diào)函數(shù):
success[成功],error[請(qǐng)求失敗],
statusCode[指明返回的狀態(tài)碼的回調(diào)函數(shù)],
complete[請(qǐng)求返回前的回調(diào)函數(shù)(處理返回不同狀態(tài)碼的請(qǐng)求)]

$.ajax('/test',{
  success:function(data){
    console.log(arguments);
  },
  error:function(jqXHR,textStatus,err){
    //jqXHR:jQuery增強(qiáng)的XHR
    //textStatus:請(qǐng)求完成狀態(tài)
    //err:底層通過(guò)throw拋出的異常對(duì)象,類(lèi)型與值與錯(cuò)誤類(lèi)型有關(guān)
    console.log(arguments);
  },
  complete:function(jqXHR,textStatus){
    //jqXHR:jQuery增強(qiáng)的XHR
    //textStatus:請(qǐng)求完成狀態(tài)success | error
    console.log(arguments);
  },
  statusCode:function(){
    '403':function(jqXHR,textStatus,err){
      //jqXHR:jQuery增強(qiáng)的XHR
      //textStatus:請(qǐng)求完成狀態(tài)
      //err:底層通過(guò)throw拋出的異常對(duì)象,類(lèi)型與值與錯(cuò)誤類(lèi)型有關(guān)
      console.log(arguments);
      console.log(400);
    },
    '400':function(){
      console.log(400);
    }
  }   
});

請(qǐng)求的數(shù)據(jù):data,processData,contentType,traditional

$.ajax('/test',{
  //請(qǐng)求的數(shù)據(jù)內(nèi)容
  data:{
    a:1,
    b:2
  },
  //請(qǐng)求的方式
  type:'POST',
  //是否對(duì)請(qǐng)求的數(shù)據(jù)進(jìn)行轉(zhuǎn)碼(用于傳輸數(shù)據(jù)為html節(jié)點(diǎn)內(nèi)容)
  processData:true,
  //當(dāng)前的數(shù)據(jù)是否使用傳統(tǒng)方式進(jìn)行url編碼
  traditional:true,
  //請(qǐng)求數(shù)據(jù)編碼格式
  contentType:'application/json'
});

響應(yīng)數(shù)據(jù):dataType,dataFilter

$.ajax('/test',{
  success:function(data){
    console.log(typeof data)
  },
  //定義的返回?cái)?shù)據(jù)的類(lèi)型
  dataType:'json | html | text | jsonp | script',
  //返回底層的原始數(shù)據(jù)進(jìn)行預(yù)處理
  dataFilter:function(data,type){
    //data:原始數(shù)據(jù)
    //type:指定的數(shù)據(jù)類(lèi)型
  }  
});

前置處理: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)
  }
});

請(qǐng)求類(lèi)型:GET(默認(rèn)) | POST | PUT | DELETE
同步異步:async(默認(rèn)true)
是否緩存:cache(默認(rèn)true)
其他參數(shù):
1.global[是否觸發(fā)全局事件]
2.ifModifed[僅在服務(wù)器數(shù)據(jù)改變時(shí)候加載數(shù)據(jù)]
3.username,password[http需要驗(yàn)證時(shí)候]
4.timeout[設(shè)置請(qǐng)求超時(shí)時(shí)間,若請(qǐng)求超時(shí)觸發(fā)error]
5.context[回調(diào)中this指向的對(duì)象]
其他相關(guān)的API

$.ajaxSetup(option)

設(shè)置全局默認(rèn)參數(shù)

//默認(rèn)為get請(qǐng)求
$.ajax('/test');

//修改全局請(qǐng)求方式為post
$.ajaxSetup({
  type:'post',
  headers:{
    test:new Date().getTime
  },
  cache:false
});

//請(qǐng)求方式改變?yōu)閜ost
$.ajax('/test');
$.ajaxPrefilter([dataTypes],handler(option,originalOptions,jqXHR))

請(qǐng)求發(fā)起前的預(yù)處理,提供了一種AOP(面向切面)編程模式,常見(jiàn)用途:
1.根據(jù)option設(shè)定執(zhí)行特定處理邏輯
2.修改option值改變請(qǐng)求默認(rèn)行為
3.通過(guò)return修改默認(rèn)dataType

例:通過(guò)return修改默認(rèn)dataType

$.ajaxPrefilter('text html json',function(options,originalOptions,jqXHR){
  //options請(qǐng)求參數(shù),含默認(rèn)值
  //originalOptions請(qǐng)求時(shí)傳入的參數(shù),不含默認(rèn)值
  //jqXHR:jQuery增強(qiáng)的XHR
  console.log(arguments);
  if(options.url == '/test'){
    return 'text';
  }
});

$.ajax('/test',{
  type:'post',
  dataType:'text',
  //自定義屬性
  test:'haha'
});

例:多次請(qǐng)求僅最后一次有效,避免多次請(qǐng)求導(dǎo)致的數(shù)據(jù)混亂

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

$.ajax('/test/');
$.ajax('/test/');

例:統(tǒng)一修改請(qǐng)求路徑

$.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');//請(qǐng)求成功
$.ajax('/test?err=n');//請(qǐng)求失敗
//請(qǐng)求順序:
//ajaxStart >> ajaxSend >> ajaxSend >> ajaxSuccess >> ajaxComplete >> ajaxError >> ajaxComplete >> ajaxStop

序列化

1.param[序列化一個(gè) key/value 對(duì)象]
2.serialize[通過(guò)序列化表單值,創(chuàng)建 URL 編碼文本字符串]
3.serializeArray[通過(guò)序列化表單值來(lái)創(chuàng)建對(duì)象數(shù)組(名稱(chēng)和值)]

例: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鏈?zhǔn)骄幊谭椒?br /> 在開(kāi)發(fā)的過(guò)程,經(jīng)常會(huì)遇到一些耗時(shí)間的操作,比如ajax讀取服務(wù)器數(shù)據(jù)(異步操作),遍歷一個(gè)很大的數(shù)組(同步操作)。不管是異步操作,還是同步操作,總之就是不能立即得到結(jié)果,JS是單線程語(yǔ)音,不能立即得到結(jié)果,便會(huì)一直等待(阻塞)。

一般的做法就是用回調(diào)函數(shù)(callback),即事先定義好一個(gè)函數(shù),JS引擎不等待這些耗時(shí)的操作,而是繼續(xù)執(zhí)行下面的代碼,等這些耗時(shí)操作結(jié)束后,回來(lái)執(zhí)行事先定義好的那個(gè)函數(shù)。如下面的ajax代碼:

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

但這樣寫(xiě)不夠強(qiáng)大靈活,也很啰嗦。為此,jQuery1.5版本引入Deferred功能,為處理事件回調(diào)提供了更加強(qiáng)大而靈活的編程模式。

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

不就是鏈?zhǔn)秸{(diào)用嘛,有何優(yōu)點(diǎn)?

優(yōu)點(diǎn)一:可以清晰指定多個(gè)回調(diào)函數(shù)

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

試想一下,如果用以前的編程模式,只能這么寫(xiě):

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

優(yōu)點(diǎn)二:為多個(gè)操作指定回調(diào)函數(shù)

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

用傳統(tǒng)的編程模式,只能重復(fù)寫(xiě)success,error等回調(diào)了。

相關(guān)文章

  • jQuery與其它庫(kù)沖突的解決方法

    jQuery與其它庫(kù)沖突的解決方法

    在jQuery庫(kù)中,幾乎所有的插件都被限制在它的命名空間里。全局的對(duì)象都很好地存儲(chǔ)在jQuery命名空間里,因此當(dāng)把jQuery和其它javascript類(lèi)庫(kù)一起使用時(shí),不會(huì)引起沖突.
    2010-06-06
  • Jquery讓form表單異步提交代碼實(shí)現(xiàn)

    Jquery讓form表單異步提交代碼實(shí)現(xiàn)

    這篇文章主要介紹了Jquery讓form表單異步提交代碼實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • jquery的 filter()方法使用教程

    jquery的 filter()方法使用教程

    filter() 方法返回符合一定條件的元素。該方法讓您規(guī)定一個(gè)條件。不符合條件的元素將從選擇中移除,符合條件的元素將被返回。這篇文章主要介紹了 jquery的 filter()方法使用,需要的朋友可以參考下
    2018-03-03
  • 使用Jquery實(shí)現(xiàn)每日簽到功能

    使用Jquery實(shí)現(xiàn)每日簽到功能

    簽到功能現(xiàn)在算是社交化網(wǎng)站增加網(wǎng)站粘合度的一個(gè)普遍做法了,于是也想在自己的項(xiàng)目中添加一個(gè),經(jīng)過(guò)一番度娘,終于完成,這里分享給大家,有需要的小伙伴可以參考下。
    2015-04-04
  • jquery實(shí)現(xiàn)省市select下拉框的替換(示例代碼)

    jquery實(shí)現(xiàn)省市select下拉框的替換(示例代碼)

    本篇文章主要是對(duì)jquery實(shí)現(xiàn)省市select下拉框的替換(示例代碼)進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2014-02-02
  • jquery異步調(diào)用頁(yè)面后臺(tái)方法&#8207;(asp.net)

    jquery異步調(diào)用頁(yè)面后臺(tái)方法&#8207;(asp.net)

    給出了兩個(gè)簡(jiǎn)單的例子,無(wú)參數(shù)的和有參數(shù)的,返回的都是json數(shù)據(jù)。
    2011-03-03
  • 使用jquery解析XML示例代碼

    使用jquery解析XML示例代碼

    這篇文章通過(guò)示例為大家介紹了使用jquery解析XML的方法,經(jīng)測(cè)試比較實(shí)用,需要的朋友可以參考下
    2014-09-09
  • jQuery插件echarts實(shí)現(xiàn)的循環(huán)生成圖效果示例【附demo源碼下載】

    jQuery插件echarts實(shí)現(xiàn)的循環(huán)生成圖效果示例【附demo源碼下載】

    這篇文章主要介紹了jQuery插件echarts實(shí)現(xiàn)的循環(huán)生成圖效果,結(jié)合完整實(shí)例形式分析了echarts插件循環(huán)輸出數(shù)字圖形的實(shí)現(xiàn)步驟與相關(guān)操作技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下
    2017-03-03
  • jQuery取得iframe中元素的常用方法詳解

    jQuery取得iframe中元素的常用方法詳解

    這篇文章主要介紹了jQuery取得iframe中元素的常用方法,結(jié)合實(shí)例形式詳細(xì)分析了jQuery針對(duì)iframe中元素獲取技巧及注意事項(xiàng),需要的朋友可以參考下
    2016-01-01
  • 簡(jiǎn)單的jQuery入門(mén)指引

    簡(jiǎn)單的jQuery入門(mén)指引

    這篇文章主要介紹了簡(jiǎn)單的jQuery入門(mén)指引,jQuery是當(dāng)今最為流行的JavaScript庫(kù),需要的朋友可以參考下
    2015-07-07

最新評(píng)論

尼勒克县| 中牟县| 二连浩特市| 海门市| 柳江县| 海兴县| 荣成市| 信丰县| 休宁县| 乾安县| 正镶白旗| 根河市| 阿城市| 平顺县| 黔西| 海盐县| 南靖县| 秦皇岛市| 乌兰县| 贡觉县| 靖远县| 陇西县| 永德县| 沾化县| 和静县| 临沂市| 玉溪市| 晴隆县| 通榆县| 道孚县| 安塞县| 崇义县| 华宁县| 罗平县| 玛纳斯县| 富锦市| 内黄县| 犍为县| 斗六市| 嘉善县| 长泰县|