2013-01-18 28 views
10

Tôi đang sử dụng xương sống trên một dự án của tôi, được tích hợp với giao tiếp với API bên ngoài. Tôi muốn sử dụng cập nhật hồ sơ theo thời gian thực. Vì tôi không có quyền truy cập vào backend chính của ứng dụng bên ngoài này, và chúng không cung cấp máy chủ websocket hay điểm cuối bỏ phiếu dài, về cơ bản tôi còn lại với tùy chọn thực hiện bỏ phiếu thông thường với setInterval và khoảng thời gian 50 giây . Nó đã hoạt động khá tốt. Vấn đề của tôi là trường hợp cạnh. Nếu vì lý do nào đó mà yêu cầu API bị treo, trong hơn 50 giây, giả sử, tôi sẽ kích hoạt yêu cầu mới ngay lập tức. Điều đó có nghĩa là, 2 yêu cầu treo ngay bây giờ, điều này sẽ được thêm vào cuối cùng. Có cách nào để đặt thời gian chờ cho yêu cầu không? Tôi biết tất cả các yêu cầu đều dẫn đến Backbone.sync, nhưng tôi đã kiểm tra mã nguồn và tôi không thấy bất kỳ cách khả thi nào trong việc thiết lập thời gian chờ cho XmlHttpRequest. Có cách nào để làm điều này một cách sạch sẽ và không có hành vi ghi đè? Hoặc có các giải pháp/giải pháp khác không?Backbone.js: xác định thời gian chờ để triển khai Backbone.sync

+0

"Tôi biết tất cả các yêu cầu đều dẫn đến Backbone.sync" - Tôi nghĩ thực tế quan trọng hơn ở đây là tất cả các sự kiện đều dẫn đến '$ .ajax()'! Giải quyết rất nhiều câu hỏi về các yêu cầu 'fetch()' và 'sync() của xương sống '. –

Trả lời

20

Chỉ cần chuyển một tùy chọn timeout:milliseconds trong đối số options tới fetch. Các tùy chọn có được thông qua trực tiếp đến jQuery.ajax, mà xử lý cấp thấp gọi XHR:

collection.fetch({timeout:50000}); 

Hoặc bạn có thể thiết lập một thời gian chờ toàn cầu cho tất cả những yêu cầu của ứng dụng của bạn bằng cách gọi jQuery.ajaxSetup trong khởi động ứng dụng của bạn:

$.ajaxSetup({timeout:50000}); 
+0

Tôi thấy, do đó, có một số tùy chọn khác có thể được chuyển tới phương thức đồng bộ hóa tne không được ghi lại. btw tôi cũng có thể vượt qua một cái gì đó như {complete: functioname}? Trong trường hợp tôi muốn thực hiện bỏ phiếu dài. – ChuckE

+1

Bạn có thể chuyển bất kỳ tùy chọn nào bạn muốn, không có xác thực. Xương sống sử dụng một số trong số chúng, thêm một số chi tiết cho nó, và sau đó chuyển nó vào jQuery.ajax, cũng được ghi lại. Bạn có thể đặt trình xử lý 'complete' nếu muốn. – jevakallio

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