2012-02-16 33 views
8

ví dụ: Chuyển đến tường Facebook, cuộn cuối trang, Facebook sẽ tải thêm các bài viết trên tường không đồng bộ. Hoặc chỉ cần nhấp vào một hình ảnh trong bài đăng trên tường của bạn. Hộp thoại hình ảnh (có nhận xét và hình ảnh lớn hơn) đang tải không đồng bộ. (Bạn có thể thấy các yêu cầu GET với firebug).Hiển thị * trình duyệt * chỉ báo tải (như khi xảy ra postback) trên ajax gọi

Nhưng bằng cách tìm và tab firefox, bạn sẽ thấy chỉ báo tải, giống như khi xảy ra đăng lại.

Tôi biết điều này có thể đạt được bằng cách sử dụng IFrame và thay đổi src của nó. Giống như những gì iGoogle thực hiện. Nhưng tôi không chắc liệu Facebook có sử dụng IFrame để tải các bài đăng trên tường bổ sung hay không. Có cách nào khác để đạt được điều này không?

Cập nhật: bằng cách nói "chỉ báo tải" Tôi không có nghĩa là chỉ báo ajax.
Như tôi đã đề cập đến chỉ báo trình duyệt (một ở phía bên trái của một tab hiển thị cho chúng tôi nếu trang đang tải) thay đổi để tải như là một postback.

+0

Bạn có muốn chỉ báo tải ajax không? http://www.bing.com/search?q=site%3Astackoverflow.com+ajax+loading+indicator&go=&qs=n&sk=&form=QBRE – jrummell

+0

@jrummell: không, ý tôi là chỉ báo * Trình duyệt * không phải là chỉ báo ajax . Vui lòng xem cập nhật của tôi. – Kamyar

+0

tìm thấy câu trả lời tại địa chỉ: [http://stackoverflow.com/q/8915772/337294][1] [1]: http://stackoverflow.com/q/8915772/337294 – Kamyar

Trả lời

6

Không AFAIK. Tôi đoán là họ có thể đặt IFrame src thành phương thức ajax và khi được tải, chúng di chuyển nội dung sang div (hoặc phần tử khác).

+1

Iframe kỹ thuật không hoạt động trong Chrome – brillout

+0

Câu trả lời này dường như đã lỗi thời trong chrome ngay bây giờ – Everettss

5

Có thể thực hiện bằng iframe. Nói tóm lại, bạn nối thêm một iframe ẩn:

var $loadingIndicator = $('<iframe src="/loading/" class="visuallyhidden">'); 
$loadingIndicator.appendTo('body'); 

Nó phải tải một trang mà quầy hàng, không bao giờ tải. Có thể trên tên miền riêng của trang web vì trình duyệt thực sự hiển thị waiting for domainname.com trong thanh trạng thái.

Trong tập tin domainname.com/loading/index.php bạn đặt:

<?php sleep(100); 

Và loại bỏ các iframe khi thực hiện xong:

$loadingIndicator.remove(); 

Nó không lý tưởng coi đây thực sự là một yêu cầu bổ sung. Một vài lý do:

  • máy chủ của bạn sẽ có yêu cầu kéo dài có thể có tác động hiệu suất
  • trình duyệt sẽ sử dụng một trong số ít các kết nối đồng thời có sẵn, do đó có thể làm chậm lại bất cứ điều gì đang tải
  • nó làm hoạt ảnh nói lắp trong trường hợp của tôi (Chrome 27/OSX, requestAnimationFrame).

qua Slow-loading technique
qua https://stackoverflow.com/a/3145840/288906

3

tôi đã thực hiện một thư viện jQuery dựa trên để xử lý này mà phải là một giải pháp khả thi trong một số trường hợp (cùng nguồn gốc) và thành công kích hoạt chỉ bận rộn trong một số trình duyệt máy tính để bàn (Chrome và Firefox hiện đại ít nhất, và kỳ lạ, cũng IE8 nhưng có lẽ không phải IE9, và chắc chắn không phải Safari hoặc hầu hết các trình duyệt di động).

Noisy JSON

Về cơ bản, tôi đang sử dụng cách tiếp cận khung nội tuyến để kích hoạt các chỉ số "bận rộn", nhưng mà không cần nhấn nhân tạo một trang "bị đình trệ" riêng biệt: thay vào đó, nó chỉ sử dụng một tùy chỉnh $ .ajaxTransport cho đi qua một iframe ẩn và sau đó phân tích cú pháp phản hồi json trở lại. Kết quả là trình duyệt hiển thị các chỉ báo tải có liên quan trực tiếp đến yêu cầu bạn đang thực hiện: không yêu cầu thêm http. Về cơ bản, bạn có thể cài đặt chỉ plugin sau đó quyết định yêu cầu ajax nào nên ồn ào và không nên chỉ bằng cách thay đổi tham số dataType.

Một lưu ý phụ, thực tế là tải nội dung trong iframe KHÔNG kích hoạt bất kỳ phản hồi giao diện người dùng nào cho người dùng trong Safari và IE9 chỉ là kỳ lạ.

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