Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从$resource获取空响应?_Javascript_Angularjs_Angularjs Resource - Fatal编程技术网

Javascript 如何从$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

如何从$resource获取空响应

我正在运行这个:

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}