Angular服务Request异步请求的实例讲解
这里我简单写个例子来方便您的理解
var request = { post: function() { var errorCallback = { error: function(f) { this.fun = f; }, fun: function(data) {} }; suessCallback = { suess: function(f) { return this.fun = f, console.log(this.fun), errorCallback; }, fun: function(data) { console.log(data) } }; returnData = { wsscat: "hello" }; //成功 //var a = suessCallback.fun(returnData); a = suessCallback.fun; setTimeout('a(returnData)', 1000) return suessCallback; } } request.post().suess(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和suessCallback
还有一个模拟ajax请求返回的returnData对象
returnData = { wsscat: "hello" };
这个在angular里面则是ajax请求服务器返回给你的json对象
我们看看这段代码执行之后会log出什么的信息,如下图
如果熟悉Javascript的话这里不难理解,是输出的函数信息是因为suess()函数里面的console.log(this.fun)这句
request.post().suess()
suess()里面this.fun = f这句是,把匿名的回调函数赋给suessCallback对象里面的fun方法,保存起来让后面setTimeout进行回调
所以我们可以看到执行出来的是打印出来的回调函数,然后就是代码一句的
console.log("wscat's test");
明白了上述这个流程之后就可以很好的理解angular封装的request服务这一块
只不过angular里面的回调不是setTimeout回调,而是换成了$http回调而已
$http.get(url).suess(function(data, status, headers, config) { //code })
而$http请求又因为根据返回的成功或者失败把数据
用相应的方法带到我们放到了被匿名回调函数覆盖,对象suessCallback的fun里面
而带数据到fun里面就是狼蚁网站SEO优化这两句
suessCallback.fun(returnData); errorCallback.fun(returnData);
后面我再深入说一下
$http.get(url).suess(function(data, status, headers, config) { //code })
data这个不用再多叙述了,我们上面做了这么多其实就是想拿服务器返回给我们的data
statushttp响应状态码,这个是很基础的东西,但我还是简单说说
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, suessCallback) { $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 suessCallback = { suess: function(f) { return this.fun = f, errorCallback; }, fun: function(data) {} }; $http.get(url).suess(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 suess responseData]:' + angular.toJson(data)); //~ alert('[http suess responseData]:'+angular.toJson(data)); var returnData = { code: data.state.code, msg: data.state.msg, data: data.data }; if (returnData.code == 1) { suessCallback.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 ours // 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 suessCallback; }, get: function(url, suessCallback) { $rootScope.dataLoadCount++; $rootScope.isLoading = $rootScope.dataLoadCount != 0; var errorCallback = { error: function(f) { this.fun = f; }, fun: function(data) {} }; var suessCallback = { suess: function(f) { return this.fun = f, errorCallback; }, fun: function(data) {} }; $http({ method: 'GET', url: url }).suess(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 suess responseData]:' + data); var returnData = { code: 1, msg: '请求成功', data: data }; suessCallback.fun(data); }). error(function(data, status, headers, config) { // called asynchronously if an error ours // 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 suessCallback; } } return request; } ])
以上这篇Angular服务Request异步请求的实例讲解就是长沙网络推广分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持狼蚁SEO。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程