hàm jQuery.active


102

Tôi đang cố gắng tìm thêm một số thông tin về hàm jQuery sau:

jQuery.active

Nó được mô tả để kiểm tra số lượng kết nối đang hoạt động đến một máy chủ và sẽ đánh giá true khi số lượng kết nối bằng 0.

Tôi không thể tìm thấy bất kỳ thông tin nào về chức năng này trên trang web jQuery và tự hỏi liệu có ai biết tôi có thể ở đâu không.

Câu trả lời:


163

Đây là một biến jQuery sử dụng nội bộ, nhưng không có lý do gì để ẩn, vì vậy nó có thể sử dụng. Chỉ cần lưu ý, nó sẽ trở thành jquery.ajax.activebản phát hành tiếp theo . Không có tài liệu vì nó được hiển thị nhưng không có trong API chính thức, rất nhiều thứ thực sự giống như thế này, như jQuery.cache(nơi tất cảjQuery.data() xảy ra).

Tôi đoán ở đây bằng cách sử dụng thực tế trong thư viện, nó dường như chỉ ở đó để hỗ trợ $.ajaxStart()$.ajaxStop()(mà tôi sẽ giải thích thêm), nhưng họ chỉ quan tâm nếu nó là 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ì để che giấu nó, nên bạn có thể thấy số lượng yêu cầu AJAX đồng thời thực tế hiện đang diễn ra.


Khi jQuery bắt đầu một yêu cầu AJAX, điều này xảy ra :

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

Đây là nguyên nhân khiến $.ajaxStart()sự kiện kích hoạt, số lượng kết nối vừa chuyển từ 0 đến 1 ( jQuery.active++không phải là 0 sau kết nối này và !0 == true), điều này có nghĩa là yêu cầu đầu tiên trong số các yêu cầu đồng thời hiện tại đã bắt đầu. Đ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ì một beforeSendhủy bỏ quareturn false hoặc một cuộc gọi ajax completechức năng chạy ):

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

Đây là nguyên nhân khiến $.ajaxStop()sự kiện kích hoạt, số lượng yêu cầu giảm xuống 0, có nghĩa là cuộc gọi AJAX đồng thời cuối cùng đã kết thúc. Các trình xử lý AJAX toàn cầu khác cũng kích hoạt trong đó.


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

@Nick: Theo giải thích của bạn về .ajaxStop sẽ được thực thi sau mỗi lần gọi ajax hoàn tất. Tuy nhiên, nó sẽ được gọi nếu tất cả các lệnh gọi ajax đã hoàn thành. Bạn có thể vui lòng sửa cho tôi nếu tôi sai.
Kishore Relangi

27
Cái này bây giờ được gọi là $.activebtw.
Ryan Bigg, 5:13

4
@RyanBigg không $chỉ đơn giản là một bí danh jQuery, vì vậy cả hai vẫn đúng?
arxpoetica

2
@ArxPoetica chỉ khi bạn đang chạy jQuerymà không có noConflict.
Ryan Bigg

19

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

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

Hãy nhớ rằng bạn sẽ cần thời gian chờ đối với yêu cầu JSONP của mình để bắt lỗi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.