2012-11-13 32 views
11

Tôi đã làm việc với api lịch sử trong khi tôi tải các trang không đồng bộ thông qua javascript/jquery. Tôi tự hỏi làm thế nào nó có thể nói với trình duyệt, rằng trang web đang tải, để trình duyệt có thể hiển thị một hình ảnh tải (như bánh xe quay trong firefox).Lịch sử Api: Cách thông báo cho trình duyệt biết rằng trang đang tải?

Edit:

Để cụ thể hơn:

Nếu tôi tải một trang trên trang web của tôi, những thay đổi url, nội dung mới được hiển thị, nhưng Firefox không hiển thị các bánh xe quay như một tín hiệu , trang đang tải.

Nếu tôi mở ảnh từ dòng thời gian trong Facebook, hình ảnh đang tải, thay đổi url và Firefox sẽ hiển thị bánh xe quay để hiển thị, hình ảnh đang tải trong nền.

Tôi cũng muốn bánh xe quay đó!

Trả lời

1

Vâng, yêu cầu không đồng bộ sẽ biết nội dung nào đó đang được tải. Bạn sẽ chỉ phải truyền bá sự kiện ở nơi khác. Ví dụ, sử dụng móc beforeSend:

$.ajax('/your_stuff', 
     beforeSend: function() { 
     $(document).trigger('loading'); 
     } 
     ....) 

và sau đó:

$(document).on('loading', function() { alert("request is loading");} 

tôi sẽ tư vấn cho bạn để kích hoạt sự kiện này cùng một lúc bạn cập nhật URL của bạn với các API lịch sử.

+1

Tập lệnh này hiển thị hộp cảnh báo. Nhưng tôi muốn, bản thân trình duyệt cho thấy rằng trang đang tải. – Olli

+0

bạn xây dựng câu hỏi của chúng tôi một chút sai, sau đó. Bạn muốn biết làm thế nào bạn có thể cập nhật các favicon để mô phỏng tình trạng "tải" trong khi thực hiện yêu cầu ajax, nếu tôi hiểu nó một cách chính xác. – ChuckE

+0

https://gist.github.com/428626 Điều này có thể giúp bạn. Bây giờ bạn chỉ cần biết nơi biểu tượng "tải" được lưu trữ, có thể khác với trình duyệt cho trình duyệt.Vì vậy, bạn có thể nhận được một để làm việc ở khắp mọi nơi trong trường hợp của bạn, hoặc bạn sẽ tìm thấy vị trí của trình duyệt và "sniff" trình duyệt trước khi cập nhật. – ChuckE

-1

Tôi giả định từ các thẻ bạn đang sử dụng jQuery cho AJAX của bạn. Bạn có thể sử dụng bộ xử lý AJAX toàn cầu như $.ajaxStart()$.ajaxComplete() Đây sẽ bắn bất kể nơi bạn gọi một phương pháp ajax trong mã của bạn

$('#myLoadingDiv').ajaxStart(toggleLoading).ajaxComplete(toggleLoading); 

function toggleLoading(){ 
    $(this).toggle(); 
} 

tham khảo API http://api.jquery.com/ajaxStart/

Tôi nghĩ rằng từ ngữ câu hỏi của bạn mà bạn muốn để có thể kiểm soát hình ảnh tải trên chính tab trình duyệt thực. Bạn không thể kiểm soát điều đó. Sử dụng hình ảnh hoặc văn bản trong trang riêng của bạn cũng là rõ ràng hơn để người dùng

EDIT Bạn phải cung cấp hình ảnh động tải của riêng bạn trong một phần tử với id=myLoadingDiv cho mã này để làm việc

+0

Tập lệnh này hiển thị một hộp cảnh báo. Nhưng tôi muốn, bản thân trình duyệt cho thấy rằng trang đang tải. – Olli

+0

hãy giải thích ý của bạn là gì bởi chính trình duyệt cho biết rằng trang đang tải'. Cũng không phải là một hộp cảnh báo ... có thể là bất kỳ html đặt bất cứ nơi nào trên trang mà bạn muốn và bạn có thể animate nó theo bất kỳ cách nào bạn muốn – charlietfl

+0

Ồ, xin lỗi, nhận xét này đề cập đến các câu trả lời khác - không phải của bạn. Tôi đã thử nghiệm tập lệnh của bạn, nhưng "bánh xe quay" trong firefox không xuất hiện. Tôi đã chỉnh sửa câu hỏi của mình với giải thích thêm. – Olli

7

Tôi tìm thấy câu trả lời trong những câu hỏi:

How to have AJAX trigger the browser's loading

var i = $('<iframe>'); 
console.log(i); 
i.appendTo('body'); 
function start() { 
    i[0].contentDocument.open(); 
    setTimeout(function() { 
     stop(); 
    }, 1000); 
} 
function stop() { 
    i[0].contentDocument.close(); 
    setTimeout(function() { 
     start(); 
    }, 1000); 
} 

start(); 

Nguồn: jsFiddle

Tập lệnh tạo iframe, được kích hoạt bởi ajax.start & ajax.stop-event.

+1

Không hoạt động trong Chrome :-( – Frodik

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