[英]jQuery, ajax .done fired late?
有誰知道為什么:“ xhr.upload.addEventListener(” load“)”事件晚5-10秒觸發成功,完成和完成事件?
什么是正確的事件? 我不知道,正確的上傳時間是什么時間?
希望有人可以幫助我:)
打招呼
$('body').on('change', '#fileUploader', function() {
// Post-Daten vorbereiten
//var data = new FormData();
//data.append('file', this.files[0]);
var xhr = new XMLHttpRequest();
var data = new FormData();
var files = $("#fileUploader").get(0).files;
for (var i = 0; i < files.length; i++) {
data.append(files[i].name, files[i]);
}
// Ajax-Call
$.ajax({
url: '<?=$this->language->modulLink('Upload/DoUpload');?>',
data: data,
type: 'POST',
cache: false,
processData: false,
contentType: false,
success: function() {
console.log("JETZT");
},
complete: function(){
console.log( "action finished" );
},
xhr: function() {
var xhr = $.ajaxSettings.xhr();
xhr.upload.addEventListener("progress", function(evt) {
if (evt.lengthComputable) {
var percentComplete = evt.loaded / evt.total;
console.log(percentComplete + ' :: ' + evt.loaded + ' :: ' + evt.total);
//Do something with upload progress here
}
}, false);
xhr.upload.addEventListener("load", function(evt) {
console.log("rdy");
}, false);
return xhr;
},
}).done(function(d) { console.log(d); });
});
這是因為您正在進行異步的 AJAX調用。 Ajax從客戶端發送請求,並且無需等待響應就開始執行在AJAX調用代碼語句之后編寫的代碼語句(在您的情況下為事件偵聽器)。 然后,一旦它從服務器接收到響應,就根據響應執行成功/失敗方法。
(1.)發送Ajax調用-> (2.)執行AJAX調用后的語句(即eventlistener方法) -> (3.)服務器最終響應AJAX調用-> (4.)成功的方法AJAX調用已執行
我建議您閱讀本教程。 AJAX
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.