2013-08-31 45 views

Trả lời

7

này không được đưa ra ngoài hộp trong phiên bản hiện tại của jQuery, nhưng vẫn có thể với ít nỗ lực.

Bạn nên nghe sự kiện progress của số XMLHttpRequest mà jQuery cung cấp cho bạn quyền truy cập. Ví dụ: from Dave Bond's blog:

$.ajax(
{ 
    type: 'POST', // 'POST' here so that _upload_ progress _also_ makes sense; 
       // Change to 'GET' if you need. 
    url: "/", data: {}, 
    beforeSend: function(XMLHttpRequest) 
    { 
    //Upload progress 
    XMLHttpRequest.upload.addEventListener("progress", function(evt){ 
     if (evt.lengthComputable) { 
     var percentComplete = evt.loaded/evt.total; 
     //Do something with upload progress 
     } 
    }, false); 

    //Download progress 
    XMLHttpRequest.addEventListener("progress", function(evt){ 
     if (evt.lengthComputable) { 
     var percentComplete = evt.loaded/evt.total; 
     //Do something with download progress 
     } 
    }, false); 
    }, 

    success: function(data){ 
    // successful completion handler 
    } 
}); 

Đây là liên kết đến docs on XMLHttpRequest's progress event.

Bạn cũng có thể muốn xem một số jquery.ajax-progress plugin để tránh tự mình thực hiện.


Ghi chú:

  • Một số trình duyệt cũ có thể không hỗ trợ các sự kiện progress.

  • Để tính tiến độ tải xuống, bạn phải biết kích thước tài nguyên cần tải xuống, tức là máy chủ phải gửi tiêu đề HTTP Content-length. Nếu không biết kích thước, thì không thể tính tiến độ. Đây là nội dung của thuộc tính lengthComputable của sự kiện progress.

-2

Nếu bạn có thể chia công việc mà máy chủ xử lý thành các khối xử lý, bạn có thể thực hiện cuộc gọi phản hồi của máy chủ khác $.get() và cập nhật thanh tiến trình theo cách đó.

function get_chunk(chunk_number, max_chunks){ 
    $.get('eg.php?chunk=' + chunk_number, function(){ 
     chunk_number++; 
     if(chunk_number < max_chunks){ 
      get_chunk(chunk_number, max_chunks) 
     } 
     update_status_bar(chunk_number, max_chunks); 
    } 
} 

Nếu không, bạn sẽ phải nhìn vào một mô hình ứng dụng web như Comet trong đó sử dụng phía máy chủ đẩy hợp khách hàng không phải thực hiện một yêu cầu để cho dữ liệu được gửi cho khách hàng

+0

điều này phụ thuộc vào công nghệ máy chủ bạn sử dụng tho .. – user1600124

+0

Làm thế nào? nếu bạn có thể chia quá trình mà máy chủ của bạn đang thực hiện thành các chức năng có thể được gọi là cái này thì cái này có thể được thực hiện trên hầu hết nếu không phải tất cả các công nghệ. Nó sẽ không hoạt động cho những thứ như lấy một hình ảnh nhất thiết mà không cần chút công việc, nhưng nếu bạn cần trả về một danh sách các kết quả từ cơ sở dữ liệu, bạn có thể giới hạn kết quả từ cơ sở dữ liệu. thiết lập của nói 100000 – DGS

+0

Vâng .. Làm thế nào bạn sẽ xác định tập tin được tải xuống bởi người dùng nào? Phiên? Php sử dụng khóa phiên để tệp phiên chỉ có thể được sử dụng bởi một yêu cầu tại một thời điểm. – user1600124

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