ajax 経由でフォームを送信し、アップロード中に単純な進行状況バーを更新しようとしています。フォームの送信は完全に機能しますが、進行状況バーを更新したり、現在読み込まれている金額を要求したりすることさえできません。
<form enctype="multipart/form-data">
<input name="file" type="file" />
<button>Update Account</button>
</form>
<progress value="0" max="100"></progress>
jQuery + Ajax
$(document).on("submit", "form", function(){
var formData = new FormData($('form')[0]);
$.ajax({
url: window.location.pathname,
type: 'POST',
xhr: function() {
myXhr = $.ajaxSettings.xhr();
if(myXhr.upload){
myXhr.upload.addEventListener('progress', progressHandlingFunction, false);
}
return myXhr;
},
async:false,
data: formData,
cache: false,
contentType: false,
processData: false
});
});
フォームを送信するaddEventListener
と、この関数が実行されて進行状況が更新されるように実行する必要があります。
function progressHandlingFunction(e){
if(e.lengthComputable){
$("progress").attr('value', e.loaded);
$("progress").attr('max', e.total);
}
}
しかし、内部の機能myXhr.upload.addEventListener();
は実行されていないようです?
myXhr.upload.addEventListener('progress', alert("test"), false);
正常に動作しますが、以下は実行されません。なぜこれが起こるのでしょうか?:
myXhr.upload.addEventListener('progress', function(){alert("test")}, false);
この例では、同様のコーディングを使用しています。