亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

Angular服務Request異步請求的實例講解

2019-11-19 13:16:41
字體:
來源:轉載
供稿:網友

首先這里我簡單寫個例子來方便您的理解

var request = {  post: function() {    var errorCallback = {      error: function(f) {        this.fun = f;      },      fun: function(data) {}    };    successCallback = {      success: function(f) {        return this.fun = f, console.log(this.fun), errorCallback;      },      fun: function(data) {        console.log(data)      }    };    returnData = {      wsscat: "hello"    };    //成功    //var a = successCallback.fun(returnData);    a = successCallback.fun;    setTimeout('a(returnData)', 1000)    return successCallback;    }    }    request.post().success(function(data) {      console.log("123");      console.log(data);    })    console.log("wscat's test");

這里首先要理解一點很重要的就是異步回調,Javascript的異步回調其實就兩個常用方法,

setTimeout定時這類和ajax請求這類

上面代碼跟angular的request服務類似,首先是這個request對象,就相當于angular注入request服務之后返回的request對象

這個對象寫了一個post方法,而post方法里面這有兩個回調對象分別是

errorCallback和successCallback 

還有一個模擬ajax請求返回的returnData對象

returnData = {      wsscat: "hello"    };

這個在angular里面則是ajax請求服務器返回給你的json對象

我們看看這段代碼執行之后會log出什么的信息,如下圖

如果熟悉Javascript的話這里不難理解,首先是輸出的函數信息是因為success()函數里面的console.log(this.fun)這句

request.post().success() 

success()里面首先this.fun = f這句是,把匿名的回調函數賦給successCallback對象里面的fun方法,保存起來讓后面setTimeout進行回調

所以我們可以看到首先執行出來的是打印出來的回調函數,然后就是代碼最后一句的

console.log("wscat's test"); 

明白了上述這個流程之后就可以很好的理解angular封裝的request服務這一塊

只不過angular里面的回調不是setTimeout回調,而是換成了$http回調而已

$http.get(url).success(function(data, status, headers, config) {//code})

而$http請求又因為根據返回的成功或者失敗把數據

用相應的方法帶到我們放到了被匿名回調函數覆蓋,對象successCallback的fun里面

而帶數據到fun里面就是下面這兩句

successCallback.fun(returnData); errorCallback.fun(returnData); 

后面我再深入說一下

$http.get(url).success(function(data, status, headers, config) {//code})

data:這個不用再多敘述了,我們上面做了這么多其實就是想拿服務器返回給我們的data

status:http響應狀態碼,這個是很基礎的東西,但我還是簡單說說

200:不用懷疑就是請求成功的意思

304:就是你請求已經被允許的情況下,服務器發現你需要的東西還是跟之前一樣沒變,則返回給你304

404:請求失敗了,請求的資源再服務器沒有發現

500:看到5一般就是服務器出錯了

??吹降木瓦@幾個吧

header:頭信息

config:生成原始請求的設置對象,如下圖

再往下看,其實post請求和get請求區別是不大的

只是這里get更簡單明了,你直接傳url過來就行了,相比post請求接口還要帶上各種需要請求的參數

但再仔細了解的話,其實post跟get在這里其實都走get請求

Request服務源碼

.service('Request', [  '$http',  '$cookies',  '$rootScope',  '$window',  '$cookieStore',  '$location',  function($http, $cookies, $rootScope, $window, $cookieStore, $location) {    var request = {      post: function(api, map, successCallback) {        $rootScope.dataLoadCount++;        $rootScope.isLoading = $rootScope.dataLoadCount != 0;        var url = '../test.php?api=' + encodeURIComponent(api);        //console.log('[http requestURL]:' + api);        //~ alert(api);        var json = '{}';        if (angular.isDefined(map)) {          json = angular.toJson(map);        }        //console.log('[http requestJson]:' + json);        url += '&data=' + encodeURIComponent(json);        var errorCallback = {          error: function(f) {            this.fun = f;          },          fun: function(data) {}        };        var successCallback = {          success: function(f) {            return this.fun = f, errorCallback;          },          fun: function(data) {}        };        $http.get(url).success(function(data, status, headers, config) {          console.log(config);          // this callback will be called asynchronously          // when the response is available          $rootScope.dataLoadCount--;          $rootScope.isLoading = $rootScope.dataLoadCount != 0;          //console.log('[http success responseData]:' + angular.toJson(data));          //~ alert('[http success responseData]:'+angular.toJson(data));          var returnData = {            code: data.state.code,            msg: data.state.msg,            data: data.data          };          if (returnData.code == 1) {            successCallback.fun(returnData);          } else {            if (returnData.code == 99) {              alert(returnData.msg);              $cookieStore.remove('token');              $cookieStore.remove('userid');              delete $cookies.token;              delete $cookies.userid;              $rootScope.isLogined = false;              $rootScope.$broadcast('refreshFooter');              switch ($rootScope.isWeiXinLogin()) {                case true:                  $location.path('login');                  break;                case false:                  $location.path('loginWebapp');                  break;              }              return;            }            errorCallback.fun(returnData);          }        }).        error(function(data, status, headers, config) {          // called asynchronously if an error occurs          // or server returns response with an error status.          $rootScope.dataLoadCount--;          $rootScope.isLoading = $rootScope.dataLoadCount != 0;          //console.log('[http error responseData]:' + angular.toJson(data));          //~ alert('[http error responseData]:status:'+status);          var returnData = {            code: 0,            msg: '網絡請求失敗',            data: {}          };          errorCallback.fun(returnData);        });        return successCallback;      },      get: function(url, successCallback) {        $rootScope.dataLoadCount++;        $rootScope.isLoading = $rootScope.dataLoadCount != 0;        var errorCallback = {          error: function(f) {            this.fun = f;          },          fun: function(data) {}        };        var successCallback = {          success: function(f) {            return this.fun = f, errorCallback;          },          fun: function(data) {}        };        $http({          method: 'GET',          url: url        }).success(function(data, status, headers, config) {          // this callback will be called asynchronously          // when the response is available          $rootScope.dataLoadCount--;          $rootScope.isLoading = $rootScope.dataLoadCount != 0;          //console.log('[http success responseData]:' + data);          var returnData = {            code: 1,            msg: '請求成功',            data: data          };          successCallback.fun(data);        }).        error(function(data, status, headers, config) {          // called asynchronously if an error occurs          // or server returns response with an error status.          $rootScope.dataLoadCount--;          $rootScope.isLoading = $rootScope.dataLoadCount != 0;          //console.log('[http error responseData]:' + angular.toJson(data));          var returnData = {            code: 0,            msg: '網絡請求失敗',            data: ""          };          errorCallback.fun(returnData);        });        return successCallback;      }    }    return request;  }])

以上這篇Angular服務Request異步請求的實例講解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕国内精品| 成人性生交大片免费观看嘿嘿视频| 成人午夜在线影院| 日韩精品黄色网| 成人免费自拍视频| 亚洲电影中文字幕| 日韩黄色av网站| 欧美日韩国产精品一区| 国产精品女人网站| 日韩av免费在线| 色偷偷综合社区| 欧美视频在线免费看| 亚洲xxxxx电影| 清纯唯美日韩制服另类| 亚洲一区二区三区在线免费观看| 国内揄拍国内精品| 成人中文字幕+乱码+中文字幕| 两个人的视频www国产精品| 欧美日韩裸体免费视频| 亚洲国产成人在线视频| 亚洲区bt下载| 欧美人成在线视频| 一本一本久久a久久精品综合小说| 91香蕉嫩草神马影院在线观看| 国自产精品手机在线观看视频| 久久免费视频在线观看| 亚洲**2019国产| 亚洲aⅴ男人的天堂在线观看| 92裸体在线视频网站| 成人乱人伦精品视频在线观看| 日韩免费电影在线观看| www亚洲精品| 亚洲肉体裸体xxxx137| 91禁国产网站| 免费不卡在线观看av| 55夜色66夜色国产精品视频| 成人动漫网站在线观看| 国产精品亚洲网站| 91精品国产亚洲| 亚洲精品国产精品国产自| 亚洲第一区在线观看| 亚洲欧美综合另类中字| 国产原创欧美精品| 91av免费观看91av精品在线| 国产极品精品在线观看| 亚洲一区二区三区777| 久久久亚洲福利精品午夜| 亚洲第一精品夜夜躁人人爽| 日韩一区二区福利| 欧美激情视频播放| 欧美一级高清免费播放| 久久免费视频这里只有精品| 成人激情视频在线| 91精品国产91久久久久久| 热久久免费视频精品| 久久久久久久电影一区| 国产精品自拍视频| 久久久中精品2020中文| 国产精品久久久久久久久久免费| 欧美精品免费在线观看| 国精产品一区一区三区有限在线| 精品亚洲aⅴ在线观看| 亚洲欧美制服丝袜| 国产亚洲精品激情久久| 91精品国产综合久久香蕉922| 亚洲第一视频网站| 97精品久久久中文字幕免费| 美女视频久久黄| 91在线无精精品一区二区| 亚洲第一av网| 亚洲精品999| 欧美性生活大片免费观看网址| 久久久国产精品亚洲一区| 色婷婷综合久久久久中文字幕1| 国产一区二区视频在线观看| 欧美极品少妇xxxxⅹ裸体艺术| 国产精品视频yy9099| 欧美巨乳在线观看| 欧美极品少妇与黑人| 亚洲欧美精品伊人久久| 国产亚洲精品美女久久久| 日本成人激情视频| 欧美激情免费在线| 亚洲性猛交xxxxwww| 亚洲美女免费精品视频在线观看| 欧美在线影院在线视频| 不卡伊人av在线播放| 热久久这里只有精品| 伊人伊成久久人综合网站| 久久久久久有精品国产| 欧美激情三级免费| 久久久精品久久久| 国内成人精品视频| 一区二区三区视频在线| 68精品久久久久久欧美| 欧美日韩亚洲高清| 在线观看日韩av| 91日韩在线播放| 奇米四色中文综合久久| 久久在线免费视频| 美女av一区二区三区| 欧美激情视频一区二区三区不卡| www.亚洲免费视频| 亚洲欧美精品在线| 国产精品毛片a∨一区二区三区|国| 在线观看中文字幕亚洲| 久久精品影视伊人网| 亚洲男人天堂2019| 国产美女搞久久| 91tv亚洲精品香蕉国产一区7ujn| 国产91精品久| 欧美极品少妇xxxxx| 国产精品自产拍高潮在线观看| 国产成人黄色av| 狠狠躁夜夜躁人人躁婷婷91| 亚洲国产女人aaa毛片在线| 日韩在线观看精品| 久久久久国产视频| 成人看片人aa| 福利一区视频在线观看| 日韩中文字幕在线观看| 亚洲999一在线观看www| 久久夜精品va视频免费观看| 久久激情视频久久| 久久久久久999| 日韩中文字幕av| 午夜精品福利视频| 97国产真实伦对白精彩视频8| 日韩欧美高清视频| 97**国产露脸精品国产| 欧美日韩国产黄| 久久精品国产电影| 亚洲欧美日本另类| 国产精品视频在线观看| 亚洲国产小视频在线观看| 日韩av手机在线观看| 亚洲精品国产精品久久清纯直播| 成人免费在线视频网站| 成人免费xxxxx在线观看| 国产免费观看久久黄| 久久精品视频在线播放| 国产+成+人+亚洲欧洲| 久久精品夜夜夜夜夜久久| 美女视频久久黄| 久久久久久一区二区三区| 欧美激情网友自拍| 日韩激情视频在线播放| 国产69精品99久久久久久宅男| 欧美在线中文字幕| 亚洲美女性生活视频| 国产精品久久久久久久电影| 国产视频精品xxxx| 国产91成人在在线播放| 91久久国产综合久久91精品网站| 久久综合电影一区| 欧美孕妇毛茸茸xxxx| 日韩精品视频在线观看网址| 久久久久九九九九| 国产欧美精品一区二区三区-老狼| 不卡av日日日| 91久久中文字幕| 91高潮在线观看| 日韩精品高清在线| 成人精品在线观看|