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

首頁 > 開發 > AJAX > 正文

在實戰中可能碰到的幾種ajax請求方法詳解

2024-09-01 08:27:18
字體:
來源:轉載
供稿:網友

前言

最近在做一個針對單個節點測速的功能頁面,測速的邏輯是,測上傳速度時,前端傳5m數據給server,記錄上傳和返回數據的時間,測下載速度時,從server下載1m的數據,記錄下載和下載成功的時間,上傳和下載用的是ajax同步以避免客戶端帶寬阻塞的問題,并進行3次取平均值。在開發過程過,因為ajax同步異步的問題,走了不少彎路,特地也把之前遇到的業務邏輯整理匯總一下。

ajax請求方法如下

一、普通的ajax,async即同步異步處理,success之后,會有data返回值,status請求狀態,xhr封裝的是請求頭,但要注意是的是,并不是所有的請求頭信息都能獲取到的,比如center-length就獲取不到

$.ajax({  type: "GET",  async: true, //異步執行 默認是true異步  url: url,  dataType: "json",  // jsonp: "callback",  success: function(data, status, xhr){   console.log(data);//返回值   console.log(status);//狀態   console.log(xhr);//obj   console.log(xhr.getResponseHeader("Content-Type"));//application/octet-stream   console.log(xhr.getResponseHeader("Center-Length"));//null  }  }); 

二、有時候碰到的業務邏輯是這樣的,請求2依賴請求1的返回結果,請求3依賴請求2的返回結果,如果用回調的方式寫,會很冗長,解決的方法有兩個,首先來看ES5的解決辦法

(1)ES5的解決辦法,用ajax同步,默認的ajax是異步的,即多個請求同時執行,改成同步后,ajax一個一個的執行,這樣ajax2就能取到ajax1的返回結果了

let res1 = "" let res2 = ""  $.ajax({  type: 'get',  async: false, //同步執行 默認是true異步  url: pars.domain + "/api.php?Action=xxx&date=2017-03-08&t=" + (new Date).getTime(),  dataType: 'json',  success: function(res) {   if(res.code == 0){    res1 = res.data.bandwidth[0]   }else{       }  } });  $.ajax({  type: 'get',  async: false, //同步執行 默認是true異步  url: pars.domain + "/api.php?Action=xxx&date=2017-03-08&dom1111" + res1 + "&t=" + (new Date).getTime(),  dataType: 'json',  success: function(res) {   if(res.code == 0){    res2 = res.data.bandwidth[0]   }else{       }  } }); 

(2)ES6的解決辦法,用promise的then方法,效果和上面的一樣,ajax會按順序執行,并且后面的ajax會拿到前一個ajax的返回值,這樣寫起來,代碼看起來會很流暢

let pro = new Promise(function(resolve,reject){  let url = pars.domain + "/api.php?Action=xxx=2017-03-08&t=" + (new Date).getTime()  let ajax = $.get(url, function(res) {   if (res.code == 0) {    resolve(resData);   }   else{   }  }, "json");  console.log('請求pro成功'); });   //用then處理操作成功,catch處理操作異常 pro.then(requestA)  .then(requestB)  .then(requestC)  .catch(requestError);  function requestA(res){  console.log('上一步的結果:'+res);  console.log('請求A成功');  let proA = new Promise(function(resolve,reject){   let url = pars.domain + "/api.php?Action=xxx&date=2017-03-08&t=" + (new Date).getTime()   let ajax = $.get(url, function(res) {    if (res.code == 0) {     resolve(resData);    }    else{    }   }, "json");  });  return proA }  function requestB(res){  console.log('上一步的結果:'+res);  console.log('請求B成功');  let proB = new Promise(function(resolve,reject){    let url = pars.domain + "/api.php?Action=xxx&date=2017-03-08&t=" + (new Date).getTime()   let ajax = $.get(url, function(res) {    if (res.code == 0) {     resolve(resData);    }    else{    }   }, "json");  });  return proB }  function requestC(res){  console.log('上一步的結果:'+res);  console.log('請求C成功');  let proC = new Promise(function(resolve,reject){   let url = pars.domain + "/api.php?Action=xxx&date=2017-03-08&t=" + (new Date).getTime()   let ajax = $.get(url, function(res) {    if (res.code == 0) {     resolve(resData);    }    else{    }   }, "json");  });  return proC }  function requestError(){  console.log('請求失敗'); }             
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 凉城县| 乌拉特中旗| 重庆市| 彭山县| 遵义市| 西畴县| 交城县| 西和县| 邵东县| 桦川县| 龙胜| 丹江口市| 建湖县| 罗定市| 隆德县| 永定县| 泗洪县| 长宁区| 武陟县| 磐安县| 平泉县| 葫芦岛市| 兴化市| 普兰县| 内黄县| 大余县| 额济纳旗| 峨眉山市| 高安市| 澄迈县| 穆棱市| 北海市| 衡南县| 千阳县| 秦皇岛市| 嫩江县| 永宁县| 汝南县| 泰来县| 密山市| 罗山县|