2015-04-01 20 views
9

Khi tôi vượt qua một mảng đến một hành động tài nguyên .. nó không chuyển đổi các tham số mảng vào một mảng các thông số URL

var Product = $resource('path/products'); 
Product.query({ids: [1,2,3]}) 

Thay vì nhận được:

path/products?ids[]=1&ids[]=2ids[]=3 

tôi nhận được:

path/products?ids=1&ids=2ids=3 

Bất cứ ai cũng biết làm thế nào để có được xung quanh vấn đề này?

Trả lời

19

Bạn có thể sử dụng $ tài nguyên để vượt qua mảng

var searchRequest = $resource('/api/search/post', {}, { 
    'get': {method: 'GET'} 
}); 
searchRequest.get({'ids[]':[1,2,3]}); 

sau đó bạn nhận được yêu cầu url

/api/search/post?ids%5B%5D=1&ids%5B%5D=2&ids%5B%5D=3 

bạn nhận được %5B%5D thay vì []

và nếu bạn mong muốn trả lại array thay vì object thì bạn nên sử dụng

'get': {method: 'GET', isArray: true} 
+1

đẹp, cảm ơn!nhưng tại sao bạn lại gắn nhãn đường dẫn GET của bạn '/ post'? xD – Blauhirn

+0

bạn đã cứu mạng tôi! –

-1

Params cần được khai báo như thế này

var Product = $resource('path/products?:ids', 
{ids: '@ids'}); 

Tuy nhiên tôi không chắc chắn những gì dẫn url bạn muốn đạt được. Bất kỳ bài đăng nào trong các cách OP đều là yêu cầu không hợp lệ, vì tham số lặp lại.

Để dính vào GET động từ và xác định một mảng trong params truy vấn tôi thấy con đường duy nhất: để xây dựng param như là một chuỗi

var query = [1,2,3].map(function(el){return 'brand[]='+el}).join('&'); 
Product.query({ids: query}); 

PS Trừ khi bạn có lý do mạnh mẽ phương pháp tốt nhất sẽ được gửi các mảng sử dụng động từ POST, như được mô tả trong this post. Với mảng gửi qua URL mà bạn có thể dễ dàng chạy ra khỏi chiều dài URL tối đa

+0

xin lỗi, OP có nghĩa là gì? – Jasper

+0

Dựa trên truy vấn, tham số 'id' được sử dụng để lọc tài nguyên .. thông số có thể là 'category_id', 'brand_id', v.v. Và tham số có thể là một mảng để biểu thị bạn muốn lọc kết quả theo các thương hiệu này ví dụ (ví dụ:/path/products? brand [] = A & brand [] = B) – Jasper

+0

truyền tham số nhiều lần mà không sử dụng [] sẽ ghi đè thông số trước đó đã qua. chẳng hạn như cho url "/ path/products? brand = A & brand = B". giá trị của thương hiệu trên máy chủ sẽ là 'B' không phải là mảng ['A', 'B'] vì thương hiệu thông số đầu tiên chứa 'A' bị ghi đè bởi tham số thương hiệu thứ hai giữ 'B' – Jasper

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