2013-04-16 83 views
1

我通過ajax請求上傳文件,只需將它們分割成塊即可。Ajax文件上傳進度事件沒有觸發

該問題的進展情況,火狐出於某種原因想不火這種情況下,這裏是我的代碼(最不必要的代碼被刪除)

//slice file 
if(file.mozSlice){ 
    chunk = file.mozSlice(startByte, endByte); 
}else if(file.slice){ 
    chunk = file.slice(startByte, endByte); 
}else{ 
    chunk = file; 
    isLast = true; 
} 


var xhr = new XMLHttpRequest(); 

xhr.upload.addEventListener('progress', function(e){ 
    console.log('progress'); 
}, false); 

xhr.upload.addEventListener('error', function(e){ 
    console.log("upload error!"); 
}); 

xhr.onreadystatechange = function(e){ 
    if(this.readyState == 4 && this.status == 200){ 
     //this chunk has bee uploaded, proceed with the next one... 
    } 
} 

xhr.open('POST', "", true); 

xhr.setRequestHeader('Cache-Control', 'no-cache'); 
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');//header 
xhr.setRequestHeader('Content-Type', 'application/octet-stream');//generic stream header 
xhr.send(chunk); 

我敢肯定,我的天堂」由於Chrome工作沒有任何問題,所以不會出現任何重大錯誤,所以必須有一些與Firefox相關的問題。

+1

也許它完成得這麼快從未有任何進展報告? – Halcyon

+0

不,我沒有嘗試使用大文件,我可以看到正在上傳的塊,有時需要大約3秒才能上傳塊。 – Linas

+0

您在此處列出的代碼看起來是正確的,我自己也沒有在Firefox中看到任何進度事件通知問題。所以,您可能會遺漏一些導致客戶端代碼出現問題的問題。沒有一個實例,可能很難確定問題的確切來源。 –

回答

-1

我檢查了我實現我加入進度事件我打電話xhr.open後,也許能解決嗎?

嘗試在這裏的第二個代碼示例:https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest/Using_XMLHttpRequest#Monitoring_progress這是否工作?

+0

那麼我已經嘗試過,但仍然沒有。在那個例子中有一個說明:'注意:在請求調用open()之前,你需要添加事件監聽器。否則,進度事件不會觸發。「所以我認爲我做到了正確的方式 – Linas

+0

您發佈的鏈接演示*下載*進度,而不是*上傳*進度。 –

7

xhr.upload.addEventListener('progress', function(e) { 
    console.log('progress'); 
}, false); 

火狐

xhr.addEventListener('progress', function(e) { 
    console.log('progress'); 
}, false);