Javascript 如何从$resource获取空响应?
如何从$resource获取空响应 我正在运行这个:Javascript 如何从$resource获取空响应?,javascript,angularjs,angularjs-resource,Javascript,Angularjs,Angularjs Resource,如何从$resource获取空响应 我正在运行这个: angular.module("services").factory('Member', function($resource) { var Member = $resource('/api/v1/member.json'); Member.current = Member.get(); return Member; }); 但服务器正在响应以下命令: null 因为用户未登录 但当我记录结果时,我得到以下结果: Reso
angular.module("services").factory('Member', function($resource) {
var Member = $resource('/api/v1/member.json');
Member.current = Member.get();
return Member;
});
但服务器正在响应以下命令:
null
因为用户未登录
但当我记录结果时,我得到以下结果:
Resource
0: "n"
1: "u"
2: "l"
3: "l"
$promise: Object
$resolved: true
__proto__: Resource
正如我所期望的那样,您的代码看起来很好。但是,在控制台中看到这种输出是一件痛苦的事。有人想马上修复它,为结果格式设置任何选项,更改URL,http/https/摆弄等等 但问题是
调用不允许的URL,因为用户未登录 我们期望一个好的so
$resource
s错误处理程序执行
这样,结果处理程序就不会执行;)
默认情况下,
$resource.get
方法期望JSON响应是一个对象(解析时)。
调用$resource.get()
时,结果将是$resource的一个实例
在您的示例中,调用Member.get({id:1})
将生成一个$resource实例,该实例通过调用创建,然后(当XHR完成时)使用解析的JSON响应的属性:
shallowClearAndCopy(data, value);
填充成员
实例的函数的签名如下:
function shallowClearAndCopy(src, dst) {
dst = dst || {};
angular.forEach(dst, function(value, key){
delete dst[key];
});
for (var key in src) {
if (src.hasOwnProperty(key) && key.charAt(0) !== '$' && key.charAt(1) !== '$') {
dst[key] = src[key];
}
}
return dst;
}
浏览函数体,您会发现函数不希望src
参数是对象(for(src中的var键){…
)。因此,如果为其提供字符串“null”
,结果将是:
{1: "n", 2: "u", 3: "l", ...}
ngResource是为支持RESTfull API而构建的,其中JSON是一种隐含的数据传输格式,因此您将无法使用响应,例如
“null”
或任何其他无效的JSON
除非。 除非您使用将
“null”
转换为类似于{'null':true}
的内容,否则:
app.factory('Member', function($resource) {
var Member = $resource('member.txt', {}, {
get: {
method: 'GET',
isArray: false,
transformResponse: function(data, headersGetter){
if(data === 'null'){
return {null: true};
}
return angular.fromJson(data);
}
}
});
return Member;
});
$scope.member = Member.get({id: 1});
console.log($scope.member); // --> {null: true}
为什么这些好的未问问题在这些日子里很少受到关注?顺便说一句@stewie回答了这个问题(y)
app.factory('Member', function($resource) {
var Member = $resource('member.txt', {}, {
get: {
method: 'GET',
isArray: false,
transformResponse: function(data, headersGetter){
if(data === 'null'){
return {null: true};
}
return angular.fromJson(data);
}
}
});
return Member;
});
$scope.member = Member.get({id: 1});
console.log($scope.member); // --> {null: true}