我有完全相同的問題。目前我使用的是一個iframe,它在表單中定位。這允許xhr請求在發佈時執行。雖然這樣做有效,但如果有人禁用javascript,它不會優雅地退化(我無法在沒有js的iframe之外加載下一頁)所以如果有人有更好的解決方案,我會很感激聽到它。
這裏的jQuery腳本供參考:
$(function() {
$('form[enctype=multipart/form-data]').submit(function(){
// Prevent multiple submits
if ($.data(this, 'submitted')) return false;
var freq = 500; // freqency of update in ms
var progress_url = '{% url checker_progress %}'; // ajax view serving progress info
$("#progressbar").progressbar({
value: 0
});
$("#progress").overlay({
top: 272,
api: true,
closeOnClick: false,
closeOnEsc: false,
expose: {
color: '#333',
loadSpeed: 1000,
opacity: 0.9
},
}).load();
// Update progress bar
function update_progress_info() {
$.getJSON(progress_url, {}, function(data, status){
if (data) {
var progresse = parseInt(data.progress);
$('#progressbar div').animate({width: progresse + '%' },{ queue:'false', duration:500, easing:"swing" });
}
window.setTimeout(update_progress_info, freq);
});
};
window.setTimeout(update_progress_info, freq);
$.data(this, 'submitted', true); // mark form as submitted.
});
});
這並不是說我聽說過的。在Chrome中,其他基於AJAX的上傳進度指示器對我來說工作正常。讓我們來看一些更多的代碼/測試用例。 – bobince 2010-01-07 21:02:28
在發送下一個請求之前是否等待先前的輪詢請求完成? – 2010-01-07 22:00:05
它的確如此。處理請求觸發下一個請求的新setTimeout。儘管如此,沒有人會出去但是發佈POST。 – 2010-01-07 22:34:39