Có cách nào dễ dàng để từ bỏ tất cả các yêu cầu jQuery AJAX chưa xử lý không? Ứng dụng của tôi có khả năng rút ra rất nhiều yêu cầu đồng thời, do đó cuộc đua trở nên có vấn đề. Tôi đã đưa vào các giải pháp hackish (cụ thể là, đặt trong một lá cờ được kiểm tra khi yêu cầu hoàn thành), nhưng nó sẽ được nhiều đẹp hơn để có được một toàn cầu ngăn chặn tất cả các yêu cầu xuất sắc chức năng.jQuery từ bỏ tất cả các yêu cầu AJAX nổi bật
Trả lời
Gán mọi yêu cầu ajax như một phần tử của một mảng:
var requests = [];
requests.push($.ajax({
type: 'POST',
url: '...',
success: successfunc
});
);
Và để giết:
$.each(requests, function(i, v) {
v.abort();
});
Tôi có thể lưu trữ tất cả yêu cầu ajax trong một mảng. Khi bạn cần phải giết sau đó chỉ cần lặp qua tất cả các giá trị trong mảng và gọi abort(). Khi một yêu cầu được hoàn thành hoặc hủy bỏ chỉ cần bật từ mảng.
XMLHttpRequest có hàm abort(). $ .ajax cho phép bạn có được bàn tay của bạn trên đối tượng xhr. giữ một bản ghi của tất cả các xhr xuất sắc và đi xhr.abort()
cho bất kỳ bạn muốn chấm dứt.
như những người khác đã nói, sử dụng phương pháp .abort(). Tuy nhiên, CHỈ này hoạt động trên các cuộc gọi trong cùng một tên miền. một khi bạn nhập vào các cuộc gọi cross-site (với jsonp), thì phương thức .abort() được gán cho null, vì vậy sẽ không thực sự cháy/làm việc.
đáng chú ý vì điều này gây cho tôi thời gian gỡ lỗi vô tận nhiều một mặt trăng nhỏ trước :)
jim
Thông tin mát mẻ, cảm ơn những người đứng đầu . – Anders
anders - niềm vui ... (tho 'kiểm tra trạng thái mới nhất trên IE vì nó chủ yếu là XMLHttpRequest trong IE đã là một vấn đề khi cố gắng làm cho trình duyệt bất khả tri trong trường hợp của tôi). tôi dường như nhớ rằng việc hủy bỏ 'timeout' được đặt thành 0 trên các cuộc gọi x-site. anyway .. :) –
Dựa trên giải pháp Ken Redler, tôi đặt này trong phần khởi tạo của tôi:
window.requests = []
$.ajaxSetup({
beforeSend: function(xhr){
var new_request_list = [xhr]
$.each(window.requests, function(k,v){
if(v.readyState != 4) new_request_list.push(v)
})
window.requests = new_request_list
}
})
tôi đặt trong đoạn mã với new_request_list
chỉ để giữ cho biến toàn cầu khỏi bị đông đúc với các đối tượng XHR hoàn chỉnh.
Tôi sẽ đặt chức năng dọn dẹp trong '$ .ajaxSetup' hoặc' xhr.onreadystatechange', nhưng tôi lo ngại rằng điều này sẽ can thiệp vào bất kỳ jQuery nào tự làm. Giải pháp này dường như hoạt động tốt. –
Tôi tìm thấy thông tin sau trên jsfiddle. Nó chủ yếu giống như trên, ngoại trừ nó sẽ xóa từng yêu cầu sau khi chúng hoàn tất. Các giải pháp ở trên chỉ tiếp tục thêm vào mảng. Vì vậy, theo thời gian, nó có thể rất lớn nếu bạn đang thực hiện rất nhiều cuộc gọi ajax. Bạn gọi số $.xhrPool.abortAll();
khi bạn muốn hủy tất cả yêu cầu chưa xử lý.
// $.xhrPool and $.ajaxSetup are the solution
$.xhrPool = [];
$.xhrPool.abortAll = function() {
$(this).each(function(idx, jqXHR) {
jqXHR.abort();
});
$.xhrPool = [];
};
$.ajaxSetup({
beforeSend: function(jqXHR) {
$.xhrPool.push(jqXHR);
},
complete: function(jqXHR) {
var index = $.xhrPool.indexOf(jqXHR);
if (index > -1) {
$.xhrPool.splice(index, 1);
}
}
});
- 1. Hủy bỏ tất cả các yêu cầu jQuery AJAX trên toàn cầu
- 2. bắt tất cả yêu cầu ajax trong jquery
- 3. Hủy bỏ yêu cầu ajax JSONP với jQuery
- 4. Yêu cầu jQuery Ajax bên trong Yêu cầu Ajax
- 5. Chaining nhiều jQuery ajax yêu cầu
- 6. Nhiều yêu cầu AJAX trong jQuery
- 7. jQuery: làm nổi bật cả các cột (không phải hàng)
- 8. jQuery bài yêu cầu (không AJAX)
- 9. Chức năng thực thi sau khi tất cả các yêu cầu ajax .load() được hoàn thành
- 10. Yêu cầu HEAD Ajax qua Javascript/jQuery
- 11. javascript: hủy tất cả các loại yêu cầu
- 12. jQuery điều chỉnh và xếp hàng các yêu cầu AJAX
- 13. Lưu dữ liệu từ yêu cầu AJAX trong biến (jQuery)
- 14. jQuery ajax sẽ không thực hiện các yêu cầu HTTPS
- 15. ajax jquery đơn giản get yêu cầu
- 16. Rò rỉ bộ nhớ với các yêu cầu AJAX + jQuery
- 17. Nhận yêu cầu ajax mới nhất và hủy bỏ các yêu cầu khác
- 18. Yêu cầu jQuery ajax hoạt động, cùng yêu cầu AngularJS ajax không
- 19. Có cách nào để có được tất cả các tiêu đề yêu cầu trong một cuộc gọi jQuery $ .ajax không?
- 20. Bảo mật các yêu cầu AJAX
- 21. Hủy yêu cầu AJAX trên chuyến bay bằng Jquery .ajax?
- 22. Kiểm tra trạng thái yêu cầu ajax của jQuery
- 23. jQuery Validate plugin v1.10 xác nhận (yêu cầu) tất cả các đầu vào trong IE8
- 24. Cài đặt Firefox để bật yêu cầu ajax miền chéo
- 25. spring mvc nhận tất cả các ánh xạ yêu cầu
- 26. CORS trong grails - Tất cả các yêu cầu thất bại?
- 27. $ .ajax bỏ qua param dữ liệu cho các yêu cầu DELETE
- 28. AngularJS chặn tất cả các yêu cầu $ http
- 29. Bộ lọc Servlet cho tất cả các yêu cầu
- 30. Yêu cầu jQuery ajax bị hủy làm chậm yêu cầu hiện tại
Cảm ơn. Điều này dường như đã thực hiện các trick. Tôi đã chọn một triển khai hơi khác một chút mà tôi nêu chi tiết [ở đây] (http://stackoverflow.com/questions/3313059/jquery-abandon-all-outstanding-ajax-requests/3313954#3313954) –