在angularjs中调用http (RESTFUL WebAPI)的正确方法
proper way to call http (RESTFUL WebAPI) in angularjs
我有以下控制器代码
module.registerController('DemoCtrl', function ($scope, myFactory) {
myFactory.get(function (data) {
console.log(data); /// data is always undefined
});
});
并跟随调用restful webapi
的工厂module.registerFactory('myFactory', ['$http',
function ($http) {
function get(callback) {
$http.get('mywebapiurl')
.success(function (response) {
//debugger; data comes back from server
callback(response);
}).error(function (response, status, headers, config) {
callback(response);
});
}
return {
get: get
}
}]);
工厂正在调用webapi服务并取回数据。然而在控制器中数据没有被返回。
我错过了什么明显的东西吗?也不确定这是否是在angularjs中使用工厂控制器调用webservice的最佳方式。欢迎提供任何意见。
谢谢,
你想要返回一个promise而不是传递一个回调。因为$http.get
已经返回了一个promise,你可以返回那个,或者直接返回响应数据的派生promise。顺便说一下,你的factory
看起来应该是一个service
:
angular.moudule('yourApp')
.service('myService', ['$http', myService]);
function myService($http) {
this.get = function(url) {
return $http.get(url)
.then(function transformData(response){
return response.data;
}).catch(function onError(rejectionResponse){
//Whatever you want to do here
});
}
}
这样,myService.get
将返回一个承诺,你可以.then()
, .catch()
和.finally()
对你想要的,留在框架的编码风格。例如:
var squirrels = [];
myService.get('http://squirrelshop.com/api/squirrels')
.then(function(squirrelsData){
console.log('Got the squirrels!');
squirrels = squirrelsData;
}).catch(function(rejection){
console.warn('Couldnt fetch squirrels. Reason: ' + rejection);
});
控制器代码
module.registerController('DemoCtrl', function ($scope, myFactory) {
myFactory.get("url").then(function(d) {
console.log(d.data);
}
});
});
正在调用restful webapi的工厂
module.registerFactory('myFactory', ['$http',
function ($http) {
var apiFactory = {
get:function(url){
return $http.get(url);
}
}
return apiFactory;
}]);
工厂的成功与失败
module.registerFactory('myFactory', ['$http',
function ($http) {
var apiFactory = {
get:function(url){
return $http.get(url).then(function(response){
// success
return responce.data;
},function(error){
//failure
return error;
};
}
}
return apiFactory;
}]);
相关文章:
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 数组在递归方法中设置为null
- 打破承诺链的好方法是什么
- 在使用Polymer'加载所有json文件后执行方法;s的核心ajax
- 使用“;这个“;JavaScript原型方法中的关键字
- 序列化数据属性中对象的最可靠方法
- 使用Objective-C的JavaScript注入方法
- 有没有一种方法可以添加相同的项目val=“0”;4〃;到JavaScript中数组的每个对象
- 有没有一种方法可以防止img get请求使用css或js发生
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- toBoolean方法类似于toString
- 如何在单击复选框后调用控制器方法
- $http-get方法即使使用AngularJS中.Net WebApi的有效json也会失败
- AngularJs发布到具有动态属性的WebApi方法
- 方法不允许在 WebAPI 中发帖
- 在angularjs中调用http (RESTFUL WebAPI)的正确方法
- WebApi方法没有得到发布的数据.缺少了什么?
- c#在POST中从jquery传递字符串给WebAPI项目方法时出错
- WebAPI DELETE - HTTP/1.1 405方法不允许