Tôi có một ứng dụng xương sống có một số lượt xem. Chuyển đổi giữa các chế độ xem sẽ kích hoạt các yêu cầu Ajax để nhận các bộ sưu tập khác nhau. Tôi muốn dừng yêu cầu ajax "đọc" hiện tại nếu yêu cầu mới được bắt đầu. Có thể không?Có thể dừng các yêu cầu "đọc" của Backbone
Trả lời
Ok vì vậy đây là những gì tôi đã làm
Tôi lưu các yêu cầu tìm nạp trong một biến
app.fetchXhr = this.model.fetch();
Trong router của tôi, tôi có một chức năng mà sẽ chăm sóc đóng các quan điểm và render lần xem . Nó cũng đảm bảo kích hoạt bất kỳ trình kích hoạt nào cần thiết cho mỗi thay đổi chế độ xem nhưng điều đó không có liên quan trong câu hỏi này.
Trước khi làm bất cứ điều gì, chức năng router này thực hiện như sau
//Stop pending fetch
if(app.fetchXhr.readyState > 0 && app.fetchXhr.readyState < 4){
app.fetchXhr.abort();
}
Tôi hy vọng điều này sẽ giúp
Tôi cho rằng bạn đang sử dụng xương sống với jQuery. Nếu vậy, những câu dưới đây dường như cung cấp một câu trả lời cho bạn:
Abort Ajax requests using jQuery
Backbone fetch
trả về xhr
họ đang nói về, IIRC.
nhưng sẽ không tìm nạp lại sau khi hoàn tất? Bạn không chắc chắn cách sử dụng liên kết mà bạn cung cấp để triển khai nó trong Backbone – Xerri
Backbone sử dụng các cuộc gọi ajax bình thường (thông qua Zepto hoặc jQuery), có nghĩa là cuộc gọi đến máy chủ không đồng bộ và vẫn có khả năng bị chấm dứt. – JayC
Có lẽ bài trả lời cuối :)
Sử dụng thời gian chờ để xác định một giá trị thời gian chờ. Điều này sẽ kích hoạt chức năng lỗi. Ở đây truy vấn có thể bị hủy bỏ.
Có lý do nào khiến bạn muốn hủy truy vấn không?
Tôi muốn hủy bỏ vì nếu tôi thay đổi chế độ xem trước khi truy vấn hoàn tất, một lỗi sẽ được tạo khi quá trình tìm nạp hoàn tất và chế độ xem sẽ bị xóa. – Xerri
Một câu trả lời muộn khác trong trường hợp người khác gặp phải vấn đề này.
Tôi đã kết thúc ghi đè Backbone.sync để thêm nhóm đối tượng XHR và tùy chọn hủy bỏ yêu cầu đang chờ xử lý khi tìm nạp.
var sync = Backbone.sync
, xhrPool = [];
Backbone.sync = function(method, model, options) {
options = options || {};
if (method === 'read') {
if (options.abortPending == true) {
for (var i = 0; i < xhrPool.length; i++) {
if (xhrPool[i]['readyState'] > 0 && xhrPool[i]['readyState'] < 4) {
xhrPool[i].abort();
xhrPool.splice(i, 1);
}
}
}
// cleanup xhrPool
// todo: make removal from the pool an 'always' jqXHR callback
// instead of cleanup on every read?
for (var i = 0; i < xhrPool.length; i++) {
if (xhrPool[i]['readyState'] === 4) {
xhrPool.splice(i, 1);
}
}
var xhr = sync(method, model, options);
xhrPool.push(xhr);
return xhr;
} else {
return sync(method, model, options);
}
};
Rất hay ... có thể không linh hoạt nếu bạn thực hiện nhiều yêu cầu tìm nạp trong một chế độ xem cụ thể. FYI ... Một trong những lý do tôi cần điều này là để tránh bị lỗi khi quá trình tìm nạp hoàn tất nhưng chế độ xem đã thay đổi (vì vậy phần tử DOM có thể chứa dữ liệu không còn ở đó nữa). Một thử/nắm bắt đơn giản xung quanh tìm nạp đã sửa lỗi này. – Xerri
- 1. Liệu app_offline.htm có dừng các yêu cầu hiện tại hay chỉ các yêu cầu mới?
- 2. Làm cách nào để tôi có thể yêu cầu ReSharper ngừng tạo các trường chỉ đọc?
- 3. Yêu cầu CanvasAnimationTiền dừng khung hình
- 4. đọc các giá trị yêu cầu bài viết HttpHandler
- 5. Đọc Http Yêu cầu vào mảng Byte
- 6. IOError: lỗi đọc dữ liệu yêu cầu
- 7. node.js: cách dừng yêu cầu http đã bắt đầu
- 8. Sử dụng nHibernate, làm thế nào tôi có thể đọc không được yêu cầu?
- 9. NodeJS dừng đáp ứng sau 11 yêu cầu
- 10. Ngăn chặn yêu cầu GWT Yêu cầu của nhà máy
- 11. Các trang/yêu cầu không quốc tịch của Apache Wicket
- 12. RestTemplate Yêu cầu GET với các tham số yêu cầu
- 13. Extract yêu cầu các thuộc tính từ yêu cầu container của Jersey
- 14. Cách lọc các yêu cầu trong Sinon
- 15. CQRS: Đọc mô hình được xây dựng theo yêu cầu?
- 16. Có thể thêm Yêu cầu Tiêu đề vào yêu cầu iframe src không?
- 17. Tôi có thể khởi động và tắt máy ảo Azure qua các yêu cầu web không?
- 18. Python EOF cho các yêu cầu đa byte của file.read()
- 19. URL yêu cầu HTTP có phải là một phần của tiêu đề yêu cầu HTTP không?
- 20. Đọc yêu cầu HTTP thô ở Django 1.3
- 21. Eclipse đang cố gắng xây dựng các tệp trong thư mục .svn của tôi ... làm thế nào tôi có thể yêu cầu nó dừng lại?
- 22. Dancer ngẫu nhiên bị treo khi đọc yêu cầu GET
- 23. yêu cầu POST của node.js
- 24. Làm cách nào để tôi có thể yêu cầu tiến trình con dừng thoát khỏi dấu ngoặc kép?
- 25. Các mảng liên kết PHP có được yêu cầu không?
- 26. Đọc tiêu đề tùy chỉnh yêu cầu HTTP
- 27. Làm thế nào tôi có thể yêu cầu Intellij ngừng gạch chân mã scala của tôi?
- 28. Bạn có thể xác định múi giờ từ các biến yêu cầu không?
- 29. Điều gì xảy ra với các yêu cầu khi tomcat dừng lại
- 30. Ruby không thể sử dụng yêu cầu
Tôi có vấn đề liên quan nhưng tôi có nhiều bộ sưu tập. Vì vậy, trước khi tôi hủy bỏ một yêu cầu, tôi cần phải chắc chắn rằng nó được liên kết với một bộ sưu tập cụ thể. Tôi hỏi câu hỏi đó ở đây, có lẽ bạn cũng đã giải quyết vấn đề này? http://stackoverflow.com/questions/21919690/association-between-backbone-collection-and-xhr-object-created-when-fetching – wuliwong
Đã không thực hiện điều này nhưng một điều bạn có thể thử là lưu trữ tất cả xhr yêu cầu trong một mảng. Trên mỗi yêu cầu xhr hoặc trên mỗi thay đổi xem, bạn có thể lặp qua mảng để xóa những người hoàn thành và dừng những người mà bạn muốn dừng lại. Điều đó sẽ cung cấp một dọn dẹp đầy đủ. – Xerri