Angular资源。$ query()和错误条件返回响应作为数组但是需要作为普通对象

时间:2013-09-07 21:22:56

标签: angularjs angularjs-resource

我正在使用服务返回文件列表。此服务返回以下内容。

成功案例:json格式的文件对象列表,如下所示,HTTP代码为200

[{"_id:"3453534","name":"File 1"},{"_id:"5756753","name":"File 2"}]

失败案例:返回错误响应,错误消息为HTTP错误代码500。

{errorMessage: "No files found for ptoject id 522b9358e4b0bab2f88a1f67"}

我正在使用以下“query”方法调用此服务。

//get the new value of files as per changed project id
            scope.files = ProjectFile.query({ projectid: scope.project._id }, function (response) {

                //Check if service response is success/fail
                if (response.servicestatus != undefined) {
                    //this is error case. Show error message.
                    alert("Failed to load list of files for this project: " + response.errorMessage);
                }
                else {
                    //update scope
                    scope.files = response;

                }
            });

我面临的问题是由$ query()方法转换的响应对象。我得到响应作为一个似乎不正确的数组。不确定为什么$ query()也期望错误响应为数组。在错误的情况下;我得到的响应如下所示

response[0][0]="N";
response[0][1]="o";
response[0][2]="";
response[0][3]="f";
response[0][4]="i";
response[0][5]="l";
response[0][6]="e";
response[0][7]="s";
....
....

我不确定为什么$ query()表现得像这样。不确定如何以正确的方式处理它。请帮忙。

1 个答案:

答案 0 :(得分:0)

$ resource的查询方法默认情况下将响应视为数组。查询没有失败,但是来自服务器的响应没有提供query()所期望的。

如果您知道只有“无文件”响应不是数组,那么您可以检查响应类型是否为数组,以便知道是否找到了任何内容。

This answer概述了一种简便的方法:

scope.files = ProjectFile.query({ projectid: scope.project._id }, function (response) {

  //Check if service response is success/fail
  if (response.servicestatus != undefined) {
    //this is error case. Show error message.
    alert("Failed to load list of files for this project: " + response.errorMessage);
  }
  else if ( Object.prototype.toString.call(response) === '[object Array]' ) {
     scope.files = response;
  } else {
    //handle the lack of files found
  }
}