国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

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

2019-11-20 10:06:44
字體:
來源:轉載
供稿:網友

$.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");  }});

但這樣寫不夠強大靈活,也很

主站蜘蛛池模板: 清远市| 财经| 土默特左旗| 龙里县| 镇江市| 赣榆县| 内丘县| 固阳县| 安康市| 盐城市| 根河市| 务川| 五河县| 清水县| 大竹县| 阜城县| 九寨沟县| 甘孜| 嘉义市| 五寨县| 木里| 昌平区| 新余市| 望谟县| 丰宁| 阳西县| 安国市| 南陵县| 交口县| 北辰区| 垣曲县| 历史| 卢龙县| 太湖县| 马鞍山市| 贞丰县| 梧州市| 平泉县| 晋宁县| 清镇市| 彰武县|