2016-07-11 1 views
1

単一ファイルをアップロードするためのページを作成しました。進行状況を追跡するためにプログレスバーを含めることにしました。それはクロムで完璧に動作しています(IEとエッジでは完全には完璧ではありませんが、やはり私はちょっとしたことがあります)。ただし、進行状況バーと関連するdocument.getElementById()は正しく動作していません。 FirefoxはjQueryの進行状況バーがFirefoxでのみ動作しない

アップロードが代わりに私のプログレスバーのアニメーションや、アップロードされたバイト数などの関連アップロードデータを表示するので

を失敗し表示するために飛び込みました。私のファイルが最終的にアップロードされ、成功ページにリダイレクトされたということは奇妙なことです。より奇妙なのは、Firefoxのデバッグツールを使用してコードを1行ずつ進めようとしたときに、プログレスバーとアップロードデータが正しく表示されていることです。

PS。これらはローカルホスト上でのみテストされました。 depricrated方法を避けるために

uploadfile.php
HTML部分

<form action="getfile.php" id="upload_form" method="post" enctype="multipart/form-data"><br> 
    Type (or select) Filename: <input type="file" id="file1" name="uploadfile"><br> 
    <input type="submit" value="Upload File" onclick="uploadFile()"> 
    <progress id="progressBar" value="0" max="100" style="width:300px;"></progress> 
    <h3 id="status"></h3> 
    <p id="loaded_n_total"></p> 
</form> 

スクリプト部分

function uploadFile() { 
    var file = document.getElementById("file1").files[0]; 
    // alert(file.name+" | "+file.size+" | "+file.type); 
    var formdata = new FormData(); 
    formdata.append("file1", file); 
    var ajax = new XMLHttpRequest(); 
    ajax.upload.addEventListener("progress", progressHandler, false); 
    ajax.addEventListener("load", completeHandler, false); 
    ajax.addEventListener("error", errorHandler, false); 
    ajax.addEventListener("abort", abortHandler, false); 
    ajax.open("POST", "getfile.php"); 
    ajax.send(formdata); 
} 
function progressHandler(event) { 
    document.getElementById("loaded_n_total").innerHTML = "Uploaded " + event.loaded + " bytes of " + event.total; 
    var percent = (event.loaded/event.total) * 100; 
    document.getElementById("progressBar").value = Math.round(percent); 
    document.getElementById("status").innerHTML = Math.round(percent) + "% uploaded... please wait"; 
} 
function completeHandler(event) { 
    document.getElementById("status").innerHTML = event.target.responseText; 
    document.getElementById("progressBar").value = 0; 
} 
function errorHandler() { 
    document.getElementById("status").innerHTML = "Upload Failed"; 
} 
function abortHandler() { 
    document.getElementById("status").innerHTML = "Upload Aborted"; 
} 

答えて

0

使用のjQuery。

var myXhr = jQuery.ajaxSettings.xhr(); 
if (myXhr.upload) { 
    myXhr.upload.addEventListener('progress', custom_progress, false); 
} 

そして、完全なAjaxの方法のための進捗

function custom_progress(e) { 
    if (e.lengthComputable) { 
     var x = (e.loaded/e.total) * 100; 
     jQuery("#progress").html(x + "%"); 
    } 
} 

ハンドル

jQuery.ajax({ 
    url: "/uploadfile.php", 
    type: "POST", 
    cache: false, 
    contentType: false, 
    processData: false, 
    data: form_data, 
    xhr: function() { 
     var myXhr = jQuery.ajaxSettings.xhr(); 
     if (myXhr.upload) { 
      myXhr.upload.addEventListener('progress', custom_progress, false); 
     } 
     return myXhr; 
    }, 
    success: function(response) { 
     console.log(response); 
    } 
}); 
関連する問題