2011-06-21 36 views
28

Tôi đã quản lý để làm việc với REST API's để fetch() dữ liệu trong đó các url chứa các thông số tối thiểu (và sử dụng GET).Tìm nạp bộ sưu tập bằng yêu cầu POST?

Làm cách nào để truy xuất bộ sưu tập thông qua yêu cầu POST?

Trả lời

62

Cũng lưu ý rằng tìm nạp hỗ trợ các tham số Jquery.ajax, vì vậy bạn có thể dễ dàng đặt loại = bài trong cuộc gọi.

Messages.fetch({data: {api_key: 'secretkey'}, type: 'POST'}); 

Để biết thêm thông số: http://api.jquery.com/jQuery.ajax/

+0

đi kèm với 0,5+ tôi tin rằng ... Tôi đã sử dụng 0.3.3 tại thời điểm – mike

+2

Cũng lưu ý rằng nó sẽ thực hiện yêu cầu POST chuẩn, không phải là bài đăng thô với JSON như Mô hình thực hiện theo mặc định –

2

Bạn có thể cần mở rộng đối tượng Bộ sưu tập để cài đặt quy ước của riêng bạn để tìm nạp. Khi làm như vậy, bạn có thể sẽ cung cấp chức năng tìm nạp của riêng bạn. Một cái gì đó như:

fetch : function(options) { 
    options || (options = {}); 
    var model = this; 
    var success = function(resp) { 
    if (!model.set(model.parse(resp), options)) return false; 
    if (options.success) options.success(model, resp); 
    }; 
    var error = wrapError(options.error, model, options); 
    (this.sync || Backbone.sync)('create', this, success, error); 
    return this; 
} 

nơi nó sử dụng 'tạo' thay vì 'đọc'. Trước tiên, đây là những gì tôi muốn thử đầu tiên, mặc dù có thể có một cách thanh lịch hơn để làm điều đó.

Nhược điểm của phương pháp này là về cơ bản bạn có mã khung trong ứng dụng của mình và nếu thay đổi khung bạn có thể gặp phải sự cố. Bạn sẽ làm tốt để phân chia sự thay đổi này thành một lớp riêng biệt để dễ dàng cập nhật với các phiên bản khung công tác mới.

+0

Mặc dù vậy, tôi đã không đi với tuyến đường này, nó đã giúp tôi tìm ra rằng tôi có thể tạo ra một phương pháp đồng bộ cho bộ sưu tập đặc biệt để cảm ơn và +1! – mike

+0

Vâng, cảm ơn. Cho rằng chỉ có một dòng ở trên là thay đổi và dòng thức ăn của nó đồng bộ, nó có vẻ như viết một đồng bộ tùy chỉnh là con đường để đi. Tôi đã không nhận ra rằng người ta có thể có đồng bộ khác nhau trong cùng một không gian ứng dụng, nhưng bây giờ nó có ý nghĩa. Có tâm trí của tôi mở ra khả năng đó, tôi tốt hơn nhiều so với một upvote vì đã cố gắng để trả lời này. –

2

Backbone.sync là chức năng được sử dụng để tương tác với máy chủ thông qua các kiểu máy của bạn. Bạn có thể cung cấp triển khai của riêng mình, đưa ra yêu cầu POST cho phương thức 'đọc' thay vì GET. Xem http://documentcloud.github.com/backbone/#Sync

+0

Ban đầu tôi đã cố gắng thực hiện phương pháp này. Tôi không muốn ghi đè Backbone.sync cho toàn bộ ứng dụng của mình ... Sau đó, tôi nhận ra rằng tôi có thể cung cấp cho bộ sưu tập đó là phương thức đồng bộ hóa của riêng tôi vì vậy tôi đã đi tuyến đường đó. Cảm ơn .. – mike

1
try { 
    // THIS for POST+JSON 
    options.contentType = 'application/json'; 
    options.type = 'POST'; 
    options.data = JSON.stringify(options.data); 

    // OR THIS for GET+URL-encoded 
    //options.data = $.param(_.clone(options.data)); 

    console.log('.fetch options = ', options); 
    collection.fetch(options); 
} catch (excp) { 
    alert(excp); 
} 
Các vấn đề liên quan