包裹角度$resource请求,但不返回POST数据
Wrap angular $resource requests not returning POST data
我正在用一个简单的包装器包装我的$resource请求。主要观点就是能够在发出请求之前添加一些逻辑。我看过尼尔斯写的那篇漂亮的文章。
在这里,您可以看到访问RESTneneneba API模块的服务定义。
resources.factory('Device', ['RequestWrapper', '$resource', 'lelylan.config', function(RequestWrapper, $http, config) {
var resource = $resource(config.endpoint + '/devices/:id', { id: '@id' });
return RequestWrapper.wrap(resource, ['get', 'query', 'save', 'delete']);
}]);
在这里您可以看到请求包装器的定义。
resources.factory('RequestWrapper', ['AccessToken', function(AccessToken) {
var requestWrapper = {};
var token;
requestWrapper.wrap = function(resource, actions) {
token = AccessToken.initialize();
var wrappedResource = resource;
for (var i=0; i < actions.length; i++) { request(wrappedResource, actions[i]); };
return wrappedResource;
};
var request = function(resource, action) {
resource['_' + action] = resource[action];
resource[action] = function(param, data, success, error) {
(AccessToken.get().access_token) ? setAuthorizationHeader() : deleteAuthorizationHeader()
return resource['_' + action](param, data, success, error);
};
};
var setAuthorizationHeader = function() {
$http.defaults.headers.common['Authorization'] = 'Bearer ' + token.access_token;
};
var deleteAuthorizationHeader = function() {
delete $http.defaults.headers.common['Authorization']
};
return requestWrapper;
}]);
GET和DELETE方法(不返回一具尸体),但我无法节省工作费用。发生的情况是,当创建的资源返回未添加的资源。我只有我在创建时设置的数据阶段让我举个例子。
在这种情况下,我们使用包装的资源。如果我尝试获取#updated_at属性,我就无法在Chrome检查器中,我可以看到资源是如何成功创建的。
$scope.device = new Device({ name: 'Angular light', type: 'http://localhost:9000/types/50bf5af4d033a95486000002' });
$scope.device.$save(function(){ console.log('Device Wrapped', $scope.device.created_at) });
# => undefined
如果我使用$resource,一切都很好。
// Suppose authorization is already set
var Resource = $resource('http://localhost'':9000/devices/:id');
$scope.resource = new Resource({ name: 'Angular light', type: 'http://localhost:9000/types/50bf5af4d033a95486000002' });
$scope.resource.$save(function(){ console.log('Device Base', $scope.resource.created_at); });
# => 2013-02-09T12:26:01Z
我开始检查angular-resource.js代码,但几个小时后我真的想不出来了它出来了。我不知道为什么返回正文,但在包装器资源中它是不可访问的。
任何想法或帮助都将不胜感激。谢谢
在深入研究AngularJS源代码时,我找到了解决方案。
问题是包装器返回的是一个函数而不是一个对象,这带来了一些问题。解决方案是更改包装中的以下行:
return resource['_' + action](param, data, success, error);
这个:
return resource['_' + action].call(this, params, data, success, error);
为什么?快速的答案是因为在angular resource的源代码中他们使用了它。实际上#call运行了将其发送给调用对象的函数。它通常用于初始化对象。点击此处了解更多信息。
相关文章:
- 当method=post时,jQueryAjax返回404
- 数据未从ajax POST返回
- post()向服务器动态生成的数据返回空响应
- DreamFactory REST API POST休息/用户/会话请求总是在IE9中返回错误
- PHP/Ajax/jquery/JON-在Ajax Post之后将echo文本中的一部分作为变量返回
- 为什么我的$http.post返回一个400错误
- AngularJS$http.post调用返回502(坏网关)错误
- 为什么Hapi.js POST处理程序返回空负载
- 如何将多个onError函数分配给promise(由angular's$http.post返回)
- jQuery's$.post只返回一个空白数据
- 已将POST更改为GET.现在Ajax正在返回多个帖子
- Ajax POST返回成功,但没有;t更新JSON文件
- 从返回的数据 ajax post 创建一个变量
- jQuery通过父函数返回$.post回调
- Javascript确认返回post值
- ajax正在加载页面以返回POST请求
- AJAX找不到php文件.它返回"POST 405(方法不允许)"
- 当使用$http发送字符串请求时,请求体作为对象返回.Post (angular)和bodyparser.text()
- 返回post数据角
- 包裹角度$resource请求,但不返回POST数据