2013-04-10 23 views
22

Tôi có sau đây trong tập tin điều khiển của tôi:

var Subject = $resource('/api/TestAccounts/:action', { applicationId: 3 }, { 
    'getSelect': { method: 'GET', params: { action: 'GetSelect' } } 
}); 

Subject.getSelect({ applicationId: 3 }, 
    function (resp) { 
     $scope.testAccounts = resp; 
     gridData = null; 
    } 
); 

tôi đang chạy máy chủ và trả về:

[{"id":5,"name":"xxx"},{"id":6,"name":"yyy"}] 

Tuy nhiên Tôi nhận được lỗi sau:

TypeError: Object #<g> has no method 'push' 
    at copy (http://127.0.0.1:81/Scripts/angular.js:577:21) 

Có ai biết tôi đang làm gì sai không?

Trả lời

5

Tôi vừa thay đổi MyService.get(...) thành MyService.query(...).get() mong đợi một đối tượng và .query() mong đợi một mảng.

49

Bạn cần đặt paramater isArray thành true trong định nghĩa tài nguyên của mình nếu bạn đang trả về một mảng từ máy chủ.

var Subject = $resource('/api/TestAccounts/:action', { applicationId: 3 }, { 
    'getSelect': { method: 'GET', isArray: true, params: { action: 'GetSelect' } } 
}); 

Xem: AngularJS $resource API

+3

đó là một thông báo ngoại lệ khá khó hiểu, vì một sai lầm có thể được thực hiện dễ dàng như vậy. Tuy nhiên, điều này chắc chắn là câu trả lời – chrismarx

+2

Vâng một số thông báo lỗi trong Angular là một chút mơ hồ. Họ đã nhận được tốt hơn, tuy nhiên điều này vẫn là một nỗi đau lớn cho những người vẫn còn học các dây giềng. –

+0

Đã có cùng một vấn đề và thay đổi đầu ra thành JSON. Dường như là một lựa chọn tốt hơn nếu bạn có sự sang trọng đó. – Jazzy

4

Tôi biết bài này là một chút cũ nhưng tôi tìm thấy một giải pháp khi tôi chạy vào vấn đề này ngày hôm nay. Sau bài viết dưới đây, tôi đã thực hiện giải pháp của joelwreed (cách nửa đường xuống). Nó kiểm tra rằng đích đến là một mảng trước khi cố gắng đẩy, điều này khắc phục được sự cố.

Link to issue filed on github

7

Theo mặc định, GET hy vọng một đối tượng {}, QUERY hy vọng một mảng []. Trong trường hợp của bạn, Web API trả về một mảng cho GET, vì vậy bạn cần đặt cờ isArray cho GET là true. Nếu Web API của bạn trả về một đối tượng, thì bạn sẽ không cần phải đặt lại cờ đó vì nó là hành vi mặc định của GET.

Các vấn đề liên quan