2010-05-26 15 views
12

Tôi có một trang nơi tôi có thể chèn một số javascript/jquery để thao tác đầu ra. Tôi không có bất kỳ kiểm soát nào khác đối với đánh dấu trang, v.v.Làm thế nào tôi có thể phát hiện 'bất kỳ' yêu cầu ajax nào được hoàn thành bằng cách sử dụng jQuery?

Tôi cần thêm phần tử phụ qua jquery sau mỗi lần hiển thị trên trang. Vấn đề là các phần tử được tạo ra thông qua một cuộc gọi không đồng bộ trên trang hiện tại xảy ra sau $ (tài liệu) .ready đã hoàn tất.

Về cơ bản, tôi cần một cách gọi jquery của tôi sau khi trang đã tải và các cuộc gọi ajax tiếp theo đã hoàn tất. Có cách nào để phát hiện sự hoàn thành của bất kỳ cuộc gọi ajax trên trang và sau đó gọi chức năng tùy chỉnh của riêng tôi để chèn các yếu tố bổ sung sau khi s mới được tạo ra?

+0

Tôi hiểu lầm, tôi nghĩ bạn đang sử dụng '$ .ajax()', tôi sẽ thêm chi tiết hơn ở đây, vì điều đó làm thay đổi rất nhiều câu hỏi ... Tôi không chắc chắn nếu như * bất kỳ sự kiện nào xảy ra , bạn có thể phải thăm dò ý kiến ​​để xem liệu một đối tượng được nạp động có tồn tại để làm những gì bạn muốn hay không. –

+0

Nick, tôi nghĩ rằng liên quan đến truy vấn ban đầu nêu rõ "jQuery" trong tiêu đề giả định của bạn là chính xác. Tôi không thể nhìn thấy câu trả lời của bạn nữa, nhưng nếu bạn readd tham chiếu đến $ .ajaxComplete Tôi sẽ vui vẻ chấp nhận câu trả lời. –

+0

Tôi đã hủy xóa câu trả lời trong trường hợp nó được sử dụng cho các googlers trong tương lai có thể gặp phải điều này * đang thực hiện tải ajax qua jQuery ... xin lỗi không có cách nào rõ ràng để thực hiện việc này với SharePoint, ít nhất là trên máy khách ... có thể có một số tùy chọn phía máy chủ để gọi một phương thức cụ thể. –

Trả lời

43

Thật không may này không áp dụng vì nó có vẻ OP không sử dụng$.ajax()hoặc bất kỳ phương pháp ajax jQuery cho thực sự tải nội dung, nhưng để lại nó ở đây trong trường hợp tương lai googler của đang làm điều này.


Bạn có thể sử dụng any of the global ajax events that meet your needs here, có lẽ bạn đang sau $.ajaxComplete() hoặc $.ajaxSuccess().

Ví dụ:

$(document).ajaxSuccess(function() { 
    alert("An individual AJAX call has completed successfully"); 
}); 
//or... 
$(document).ajaxComplete(function() { 
    alert("ALL current AJAX calls have completed"); 
}); 

Nếu bạn muốn chạy chỉ là một số chức năng chung sau đó đính kèm chúng vào tài liệu (chúng tôi chỉ sự kiện bên dưới). Nếu bạn muốn hiển thị một cái gì đó cụ thể, ví dụ như một phương thức hoặc tin nhắn, bạn có thể sử dụng chúng một chút neater (mặc dù điều này không có vẻ là những gì bạn đang sau), như thế này:

$("#myModal").ajaxComplete(function() { 
    $(this).fadeIn().delay(1000).fadeOut(); 
}); 
+0

Xin chào Nick, tôi đã thử ví dụ của bạn và đã cố gắng sử dụng ajaxSuccess trước đó nhưng không có may mắn. Tôi nghĩ rằng ví dụ của bạn là chính xác nhưng nó không phải là một cảnh báo cho tôi. Để thêm một chút nền nữa; Tôi đang cố thêm nhiều phần tử hơn vào đầu ra của một webpart chuẩn của Sharepoint. Webpart liệt kê một loạt tài liệu theo nhóm cha/con. Ban đầu trang tải với các phần tử cha và sau đó gọi một yêu cầu ajax để tải các tài liệu trẻ em. Đó là vào thời điểm này mà tôi không thể phát hiện các cuộc gọi ajax để áp dụng jquery cho các yếu tố trở về. –

+1

Đối với guuglers cũng có chức năng: $ (tài liệu) .ajaxStart (function() { – user956584

+1

Đây là những gì tôi sử dụng [jquery.ajax.tracker] (https://github.com/jmb-mage/ajax-request-tracker/blob /master/jquery.ajax.tracker.js) –

1

tôi có thể hiểu, bạn đang sử dụng một số chức năng Ajax của jQuery trong trình xử lý sẵn sàng của bạn. Vì vậy, bạn chỉ có thể vượt qua nó một hàm khác, sẽ được gọi sau khi hàm Ajax của bạn nhận được phản hồi. Ví dụ:

$(document).ready(function(){ 
    $("#some_div").load('/some_url/', function(){ 
     /* Your code goes here */ 
    }); 
}); 
1

Ví dụ này chỉ cho thấy và ẩn các yếu tố vào lúc bắt đầu và kết thúc của ajax cuộc gọi sử dụng jQuery:

$("#contentLoading").ajaxSend(function(r, s) { 
     $(this).show(); 
     $("#ready").hide(); 
    }); 

    $("#contentLoading").ajaxStop(function(r, s) { 
     $(this).hide(); 
     $("#ready").show(); 
    }); 

#contentLoading là một chỉ báo gif tiến bộ hình ảnh.

1

Bạn có thể viết lại hàm send() của đối tượng XMLHttpRequest.

Xem giải pháp để thực hiện việc đó bằng Javascript thuần túy here.

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