Как исправить ожидаемый ответ, чтобы содержать массив, но получил объект ANgular js

Я новичок, так трудно получить эту ошибку, используя ресурсный модуль после вызова службы. может ли кто-нибудь изменить мою ошибку в коде, где я становлюсь неправильным или просто изменен, что pieace, который должен исправить thanx, должен быть оценен.

Формат данных Прибытие: -

[
    brands: Array[1]
    0: Object
    __v: 0
    _id: "5251a4a34f232fc3902"
    account_id: "525072320e32971b"
    name: "Fruits"
    __proto__: Object
    1: Object
    length: 2

    categories: Array[1]
        0: Object
        __v: 0
        _id: "5251a4a34f2323fc3902"
        account_id: "5250723230e32971b"
        name: "Fruits"
        __proto__: Object
        1: Object
        length: 2
]

Ошибка: -

[$ resource: badcfg] Ошибка в конфигурации ресурсов. Ожидаемый ответ содержать массив, но получил объект

itmsFormView.html

<select class="form-control" ng-model="item.brand_id" id="itemBrand" >
    <option value="">Select Brand</option>
    <option ng-repeat="brand in brands" value="{{brand.brand_id}}">{{brand.name}}  </option>
</select>



 <select class="form-control" ng-model="item.category_id" id="itemCategory">           

<option value="">Select Category</option>
       <option ng-repeat="category in categories" value="{{category.brand_id}}">{{category.name}}</option>
    </select>

ItemsService.js

app.factory('itemService', function ($resource) {
    return {
        getCategoryAndBrand   :  $resource("/user/categories_brands" ,{},{ TypeGetCategoryAndBrand:{method: 'get', isArray:true}})
    };
});

ItemsController.js

app.controller('itemsFormController', function ($rootScope, $scope, itemService, $location, $cookies, $routeParams) {
        itemService.getCategoryAndBrand.TypeGetCategoryAndBrand({}, function(response){
                console.log(response);

            },function(errorResponse){
                console.log(errorResponse);
            }
        );  
});

Ответ 1

Из документации:

Действие isArray

isArray – {boolean=} – If true then the returned object for this action is an array, see returns section.

В соответствии с вашим кодом isArray = true. Установите его в значение false, и вы можете использовать объект вместо массива.

app.factory('itemService', function ($resource) {
return {
        getCategoryAndBrand   :  $resource("/user/categories_brands" ,{},{ TypeGetCategoryAndBrand:{method: 'get', isArray:true}})
    };
});

Он ожидает, что вы передадите параметры как массив, а не объект

из вашего кода

$resource("/user/categories_brands" ,{},{ TypeGetCategoryAndBrand:{method: 'get', isArray:true}})

Если нужно полагаться на документацию, а не на ошибку, которую я получаю, я попытаюсь передать это в виде массива, а не объект, чтобы увидеть, получится ли у вас тот же ответ.

Ответ 2

В моем случае сервер API возвращал HTML-страницу (страницу с ошибкой), которая обрабатывалась как строка, вместо правильного ответа JSON, который был бы javascript-объектом.

В качестве побочного кода ошибки javascript и stacktraces действительно являются чем-то.

Ответ 3

Надеюсь, что этот ответ еще не слишком поздно.

Вы не должны исправлять эту проблему, поставив оператор isArray: true переопределить метод метода get get в объявлении ресурса.

Есть два способа исправить эту проблему.

1. Используйте "запрос" вместо этого. Он работает как метод "get" полностью, но его isArray установлен на true естественным образом.

TypeGetCategoryAndBrand:{method: 'query'}

2. На стороне сервера ответ на объект намного проще и умнее. Вы можете продолжить использовать метод "get" на своей стороне клиента и изменить код на стороне сервера следующим образом:

res.jsonp(articles);

где статьи - это массив результатов, к этому:

res.jsonp(articles[0]);

Ответ 4

Вы получаете объект, содержащий два массива.

Мое предположение заключается в том, что в вашем коде перед началом работы с выходами console.log вы устанавливали categories = response;.

Вам необходимо установить его: categories = response.categories;

Здесь:

app.controller('itemsFormController', function ($rootScope, $scope, itemService, $location, $cookies, $routeParams) {
        itemService.getCategoryAndBrand.TypeGetCategoryAndBrand({}, function(response){

                categories = response.categories;
                console.log(response);

            },function(errorResponse){
                console.log(errorResponse);
            }
        );  
});

Это может помочь понять проблему, а также:

Запрос ресурса AngularJS $возвращает массив с функцией в нем, которая не очень хорошо подходит при повторении данных

Ответ 5

Очень просто решить для меня документацию:

app.factory('Article', ['$resource', function ($resource) {
    return $resource('/v1/a/:id', null,
        {
            'query':  {method:'GET', isArray:false},
            'update': { method:'PUT' }
        });
}]);