2012-02-13 53 views
13

Có cách nào dễ dàng để phát hiện xem một XMLHttpRequest có hoạt động trong cửa sổ trình duyệt không? Hoặc có bao nhiêu người đang hoạt động? I E. Có cách nào để phát hiện xem có bất kỳ cuộc gọi AJAX nào đang hoạt động trong cửa sổ trình duyệt của tôi không?Cách kiểm tra xem các yêu cầu HTTP có đang mở trong trình duyệt không?

Gia hạn câu hỏi: Sử dụng javascript có cách nào tôi có thể xem nếu có bất kỳ XMLHttpRequests nào đang mở không? Chẳng hạn như "window.XMLisActive()" hoặc một cái gì đó như thế?

Giải pháp: Đã kết thúc viết một wrapper cho XMLHttpRequest https://gist.github.com/1820380

+1

Bạn có ý nghĩa gì khi hoạt động? Bạn có thể mở rộng câu hỏi thêm một chút không, như bạn đang cố gắng thực hiện điều này như thế nào, bạn đã thử những gì ...? – TheBoyan

Trả lời

22

Không có một cách để phát hiện một kết nối mở cửa từ JS trừ khi bạn viết một wrapper cho XmlHttpRequest (hay khỉ vá nó) mà theo dõi các kết nối mở.

Dưới đây là bản vá khỉ kidcapital, không chắc chắn nếu nó hoàn hảo, nhưng đó là một khởi đầu tốt

(function() { 
    var oldOpen = XMLHttpRequest.prototype.open; 
    window.openHTTPs = 0; 
    XMLHttpRequest.prototype.open = function(method, url, async, user, pass) { 
     window.openHTTPs++; 
     this.addEventListener("readystatechange", function() { 
      if(this.readyState == 4) { 
      window.openHTTPs--; 
      } 
     }, false); 
     oldOpen.call(this, method, url, async, user, pass); 
    } 
    })(); 
+1

kết thúc bằng cách viết một ý chính cho nó có thể tìm thấy ở đây https: // gist.github.com/1820380 – kidcapital

+1

@kidcapital: Tôi đã đăng một cái gì đó rất giống ở đây, nhưng không dành thời gian để hoàn thành nó, vì vậy tôi đã xóa nó. Bạn đã xem nó trong 30 giây mà nó đã được đăng? Nó trông gần như chính xác như những gì tôi đã có;) Trong mọi trường hợp, hãy chắc chắn để kiểm tra lỗi mạng, và 'abort()' được gọi là –

+0

haha ​​tôi đã không nhìn thấy nó. các lỗi mạng vẫn sẽ kích hoạt responseCode 4 mặc dù? sẽ kiểm tra lại hủy bỏ() – kidcapital

3

Bạn có thể sử dụng FireBug cho điều đó.

enter image description here

+4

tự hỏi liệu tôi có thể truy cập nó trong Javascript không. – kidcapital

+0

Hoặc bất kỳ môi trường phát triển trình duyệt nào khác. http://stackoverflow.com/questions/4445759/is-there-a-single-html5-javascript-and-css-debugger/4445828#4445828 –

1

Bằng cách sử dụng jQuery, bạn có thể theo dõi nếu có mở yêu cầu với các xử lý sự kiện toàn cầu: .ajaxStart().ajaxComplete()

Biến toàn cầu được đặt trên ajaxStart và đặt lại trên ajaxComplete sẽ thực hiện công việc.

+0

Giả sử bạn đang sử dụng jquery .ajax. Nếu bạn không có jQuery ibrary thì sao? – kidcapital

+2

Đây là câu trả lời của tôi được đề cập, nếu bạn có trình bao bọc cho 'XmlHttpRequest', thật dễ dàng để làm (nếu trình bao bọc của bạn hỗ trợ nó). Nếu bạn không có jQuery, bạn có thể bắt đầu sử dụng nó hoặc viết trình bao bọc của riêng bạn. –

+0

Ghép nối đúng là ajaxSend và ajaxComplete (kiểm tra tài liệu) –

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