Как исправить ожидаемый ответ, чтобы содержать массив, но получил объект 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' }
});
}]);