2011-06-26 37 views
20

Tôi muốn làm việc với backbone.js và jquery. Ứng dụng này được cho là chạy ngoại tuyến trên điện thoại di động (ví dụ: "localhost"), có một vài cuộc gọi trên máy chủ phụ trợ ở đâu đó trên internet.backbone.js và tập lệnh tên miền chéo

Cách tốt nhất để nhận ra yêu cầu miền chéo với backbone.js là gì?

Tôi muốn sử dụng JSON, nhưng cuối cùng tôi có thể chuyển về REST nếu cần.

Đây là mã không phải là rất ấn tượng của tôi cho đến nay:

App.Collections.Events = Backbone.Collection.extend({ 
    model: Event,  
    url: 'http://mydomain.com/api/getevents/user_id/1/' 
}); 
+11

Không chắc tôi hiểu "Tôi muốn sử dụng JSON, nhưng cuối cùng tôi có thể chuyển về REST nếu cần." - JSON và REST không phải là một trong hai thứ, JSON là một định dạng để tuần tự hóa dữ liệu thành một chuỗi, REST là một mẫu giao diện dịch vụ web. Tôi sẽ đăng câu trả lời và điều chỉnh nếu bạn có bất kỳ giải thích nào. – Stoive

Trả lời

38

Có hai cách cho phép XMLHttpRequests cross-domain, đó là phương pháp Backbone.js sử dụng để lấy dữ liệu từ một URL. Đầu tiên là thích hợp nếu bạn có quyền kiểm soát phía máy chủ của miền không có nguồn gốc mà bạn đang cố gắng kết nối và liên quan đến việc ngụ ý Cross-Origin Resource Sharing (hoặc CORS).

Thực hiện CORS, trả lại 'xứ' phần tiêu đề yêu cầu HTTP Referer (bit lên đến đầu path; nó phải phù hợp regex ^.+?\/{2}[^\/]*) trong tiêu đề Access-Control-Allow-Origin đáp ứng cho các tên miền mà bạn muốn dùng để:

Access-Control-Allow-Origin: http://mydomain.com 

Bạn có thể cần ghi đè Backbone.sync để đặt right settings được đặt trên đối tượng XMLHttpRequest.

Tùy chọn thứ hai, nếu bạn không có quyền truy cập vào máy chủ gốc, sẽ ủy quyền các yêu cầu thông qua máy chủ của riêng bạn (hoặc là nguồn gốc hoặc một cho phép CORS). Rõ ràng bất cứ ai sở hữu miền bạn đang cố gắng gọi có thể không giống như bạn đang làm, nhưng đó là do thiết kế - nếu họ không muốn bạn gọi dịch vụ của bạn, họ chỉ có một địa chỉ IP để chặn, thay vì mỗi IP của khách hàng.

+0

wow, thật đơn giản! Thanx! :-) Đối với tôi nó đã làm việc btw với http://mydomain.com mà không có dấu gạch chéo – herrjeh42

+3

Không có vấn đề gì! Bây giờ nếu điều này bao gồm tất cả mọi thứ, hãy đánh dấu nó là câu trả lời đúng. Cảm ơn :) – Stoive

+0

cảm ơn vì đã chỉ cho tôi tính năng "trả lời đúng", Stoive! – herrjeh42

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