how to fix Expected response to contain an array but got an object ANgular js

前端 未结 5 2278
再見小時候
再見小時候 2021-02-19 21:29

i am new one so difficult to getting this error using resource module after calling service. can any one modify my mistake in code where i am getting wrong or just modified that

相关标签:
5条回答
  • 2021-02-19 22:10

    Hope this answer is not too late.

    You should not fix this problem by putting a isArray:true statement to override "get" method's nature in your resource declaration.

    There are two ways to fix this problem.

    1.Use "query" method instead. It works like "get" method totally, but its isArray is set to true naturally.

    TypeGetCategoryAndBrand:{method: 'query'}
    

    2.On the server side, responding an object is a much easier and much smarter way. You can continue using "get" method on your client side and change your server side code from this:

    res.jsonp(articles);
    

    where articles is the result array, to this:

    res.jsonp(articles[0]);
    
    0 讨论(0)
  • 2021-02-19 22:14

    A very simple solve for me from the documentation:

    app.factory('Article', ['$resource', function ($resource) {
        return $resource('/v1/a/:id', null,
            {
                'query':  {method:'GET', isArray:false},
                'update': { method:'PUT' }
            });
    }]);
    
    0 讨论(0)
  • 2021-02-19 22:19

    From the documentation:

    Action isArray

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

    According to your code isArray = true. Set it to false and you can use an object instead of an array.

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

    It's expecting you to pass in the parameters as an array not an object

    from your code

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

    If the documentation is to be believed than with the error your getting I'd try to pass this in the form of an array and not an object to see if you get the same response.

    0 讨论(0)
  • 2021-02-19 22:20

    In my case, the API server was returning an HTML page (an error page) that is treated as a string, instead of the correct JSON response which would be a javascript object.

    As a sidenote, javascript errors and stacktraces are really something.

    0 讨论(0)
  • 2021-02-19 22:22

    You are getting an object that contain two arrays.

    My guess is that in your code before you started with the console.log outputs, you were setting categories = response;.

    You need to set it to: categories = response.categories;

    Here:

    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);
                }
            );  
    });
    

    This might help to understand the problem, also:

    AngularJS $resource query returns array with a function in it, which is not does not fit well when iterating through data

    0 讨论(0)
提交回复
热议问题