2010-06-30 17 views
84

Tôi đã cố gắng tìm một số chi tiết thông tin về jQuery chức năng sau:jQuery.active chức năng

jQuery.active 

Nó được mô tả ở đây để kiểm tra số lượng kết nối tích cực đến một máy chủ và sẽ đánh giá đúng khi số lượng kết nối bằng không.

http://agilesoftwaretesting.com/?p=111

http://web.elctech.com/2008/11/10/jquery-ajax-loading-and-selenium-respec-testing/

tôi không thể tìm thấy bất kỳ thông tin về chức năng này trên trang web của jQuery và đã tự hỏi nếu có ai biết nơi tôi có thể.

Trả lời

146

Đây là một biến jQuery sử dụng nội bộ, nhưng không có lý do để ẩn, do đó, nó có để sử dụng. Chỉ cần đứng lên, it becomes jquery.ajax.active next release. Không có tài liệu nào vì đó là số được hiển thị nhưng không có trong API chính thức, rất nhiều thứ giống như thế này thực sự, như jQuery.cache (trong đó tất cả jQuery.data() hoạt động).

Tôi đoán đây bởi thực tế sử dụng trong thư viện, nó có vẻ là có độc quyền để hỗ trợ $.ajaxStart()$.ajaxStop() (mà tôi sẽ giải thích thêm), nhưng họ chỉ quan tâm nếu nó 0 hay không khi một yêu cầu bắt đầu hoặc dừng lại. Tuy nhiên, vì không có lý do gì để ẩn nó, nó tiếp xúc với bạn có thể thấy số lượng thực tế của đồng thời yêu cầu AJAX hiện đang diễn ra.


Khi jQuery bắt đầu một yêu cầu AJAX, this happens:

if (s.global && ! jQuery.active++) { 
    jQuery.event.trigger("ajaxStart"); 
} 

Đây là những gì gây ra sự kiện $.ajaxStart() để bắn, số lượng kết nối chỉ đi 0-1 (jQuery.active++ không phải là 0 sau cái này và !0 == true), điều này có nghĩa là bắt đầu yêu cầu đồng thời mới nhất. Điều tương tự cũng xảy ra ở đầu bên kia. Khi một yêu cầu AJAX dừng (vì a beforeSend abort via return false hoặc một ajax call complete function runs):

if (s.global && ! --jQuery.active) { 
    jQuery.event.trigger("ajaxStop"); 
} 

Đây là những gì gây ra sự kiện $.ajaxStop() để bắn, số lượng yêu cầu đã giảm xuống còn 0, có nghĩa là đồng thời gọi AJAX cuối cùng kết thúc. Ngọn lửa other global AJAX handlers trong đó dọc theo đường đi.

+1

Đó là Nick tuyệt vời. Nhiều đánh giá cao :) – RyanP13

+2

Tôi thấy nó được mô tả trong một cuốn sách jQuery Novice để Ninja (2010) – jmav

+0

@Nick: Theo lời giải thích của bạn về .ajaxStop sẽ được thực hiện sau khi tất cả các cuộc gọi ajax hoàn thành. Tuy nhiên, nó sẽ được gọi nếu tất cả các cuộc gọi ajax được hoàn thành. Bạn có thể vui lòng sửa tôi nếu tôi sai. –

19

Đối với bất cứ ai cố gắng sử dụng jQuery.active với yêu cầu JSONP (như tôi đã), bạn sẽ cần phải kích hoạt nó với điều này:

jQuery.ajaxPrefilter(function(options) { 
    options.global = true; 
}); 

Hãy ghi nhớ rằng bạn sẽ cần một thời gian chờ theo yêu cầu của bạn JSONP để bắt thất bại.

+2

+1 để bật $ .active cho JSONP bằng phương pháp này, nó hoạt động! – Kagawa