JQuery中的ajax方法:
參數解釋:(主要就用到url、type、data、dataType、success、error等,其他的看需求而定)
$.ajax({
url:" ", //請求的地址,類型為string
type:" ", //請求方式,類型為string,兩種“get”或者“post”,默認為“get”
timeout: //要求為Number類型的參數,設置請求超時時間(毫秒)。此設置將覆蓋$.ajaxSetup()方法的全局設置。
async: //要求為Boolean類型的參數,默認設置為true,所有請求均為異步請求。如果需要發送同步請求,請將此選項設置為false。注意,同步請求將鎖住瀏覽器,用戶其他操作必須等待請求完成才可以執行。
cache: //要求為Boolean類型的參數,默認為true(當dataType為script時,默認為false),設置為false將不會從瀏覽器緩存中加載請求信息。
data: //要求為Object或String類型的參數,發送到服務器的數據。如果已經不是字符串,將自動轉換為字符串格式。get請求中將附加在url后
dataType: //要求為String類型的參數,預期服務器返回的數據類型。如果不指定,JQuery將自動根據http包mime信息返回responseXML或responseText 作為回調函數參數傳遞。可用的類型如下:
xml:返回XML文檔,可用JQuery處理。
html:返回純文本HTML信息;包含的script標簽會在插入DOM時執行。
script:返回純文本JavaScript代碼。不會自動緩存結果。除非設置了cache參數。注意在遠程請求時(不在同一個域下),所有post請求都將轉為get請求。
json:返回JSON數據。
jsonp:JSONP格式。使用SONP形式調用函數時,例如myurl?callback=?,JQuery將自動替換后一個“?”為正確的函數名,以執行回調函數。
text:返回純文本字符串。
beforeSend: //要求為Function類型的參數,發送請求前可以修改XMLHttpRequest對象的函數,例如添加自定義HTTP頭。在beforeSend中如果返回false可以取消本次ajax請求。
complete: //要求為Function類型的參數,請求完成后調用的回調函數(請求成功或失敗時均調用)。
success: // 要求為Function類型的參數,請求成功后調用的回調函數,有兩個參數。
(1)由服務器返回,並根據dataType參數進行處理后的數據。
(2)描述狀態的字符串。
error: //要求為Function類型的參數,請求失敗時被調用的函數。該函數有3個參數,即XMLHttpRequest對象、錯誤信息、捕獲的錯誤對象(可選)
contentType: //要求為String類型的參數,當發送信息至服務器時,內容編碼類型默認為"application/x-www-form-urlencoded"。該默認值適合大多數應用場合。
.......還有很多,只是基本用不到
})
$.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() { //請求出錯處理 } });
用vue時,經常用到的。vue-resource和axios
vue-resource(基本不再使用):
優點:體積小、支持主流的瀏覽器、支持Promise API和URI Templates、支持攔截器。
用法:全局引入后,則在實例中使用。
常用的:
this.$http.get().then();
this.$http.post().then();
this.$http.jsonp().then();
axios:axios是基於promise的用於瀏覽器和nodejs的HTTP客戶端,本身有以下特征:
- 從瀏覽器中創建XMLHttpRequest;
- 從nodejs發出http請求
- 支持promiseAPI
- 攔截 請求和響應
- 轉換請求和響應數據
- 取消請求
- 自動轉換JSON數據
- 客戶端支持防止CSRF/XSRF攻擊
初始化常用的配置項:
axios.defaults.baseURL = 'https://www.baidu.com'; axios.interceptors.response.use(result => result.data); //=>設置響應攔截器:分別在響應成功和失敗的時候做一些攔截處理(在執行成功后設定的方法之前,先會執行攔截器中的方法) axios.defaults.validateStatus = function validateStatus(status) { //=>自定義成功失敗規則:RESOLVE / REJECT(默認規則:狀態碼以2開頭算作成功) return /^(2|3)\d{2}$/.test(status); }; //=>設置在POST請求中基於請求主體向服務器發送內容的格式,默認是RAW,項目中常用的是URL-ENCODEED格式 axios.defaults.headers['Content-Type'] = 'appliction/x-www-form-urlencoded'; axios.defaults.transformRequest = data => { //=>DATA:就是請求主體中需要傳遞給服務器的內容(對象) let str = ``; for (let attr in data) { if (data.hasOwnProperty(attr)) { str += `${attr}=${data[attr]}&`; } } return str.substring(0, str.length - 1); };
執行get數據請求:
axios.get('url',{ params:{ id:'接口配置參數(相當於url?id=xxxx)', }, }).then(function(res){ console.log(res);//處理成功的函數 相當於success }).catch(function(error){ console.log(error)//錯誤處理 相當於error })
執行post數據請求:
axios.post('url',{data:xxx},{ headers:xxxx, }).then(function(res){ console.log(res);//處理成功的函數 相當於success }).catch(function(error){ console.log(error)//錯誤處理 相當於error })
axios API 通過相關配置傳遞給axios完成請求:
axios({ method:'delete', url:'xxx', cache:false, params:{id:123}, headers:xxx, }) //------------------------------------------// axios({ method: ’post’, url: ’/user/12345’, data: { firstName: ’Fred’, lastName: ’Flintstone’ } });
axios的並發(axios.all,axios.spread):
let axiosList=[ axios.get('url1',{params:xxx,dateType:'JSON'}), axios.get('url2',{params:xxx,dateType:'TEXT'}), ] axios.all(axiosList).then(axios.spread(function(res1,res2){ console.log(res1,res2)//分別是兩個請求的返回值 })
axios包含所有請求方式函數的封裝:
axios.get(url [,config]) axios.delete(url [,config]) axios.head(url [,config]) axios.post(url [,data [,config]]) axios.put(url [,data [,config]]) axios.patch(url [,data [,config]]) 當使用別名方法時,不需要在config中指定url,method和data屬性。
創建實例:
var instance = axios.create({//初始化數據 baseURL: ’https://some-domain.com/api/’, timeout: 1000, headers: {’X-Custom-Header’: ’foobar’} });