Tôi có biểu mẫu tải lên cho phép người dùng tải lên nhiều tệp. Tôi quyết định rằng một thanh tiến trình sẽ là tốt nếu các tập tin là khá lớn. Dưới đây là mã nguồn của tôi. Tôi mới đến jquery bình thường tôi sẽ chỉ php nhưng tôi thấy rằng ajax thân thiện với người dùng hơn.Hiển thị tiến trình tải lên nhiều tệp Jquery/Ajax
<div id="new_upload">
<div class="close_btn"></div>
<div id="uploads"></div>
<form action="global.func/file_upload.php" method="post" enctype="multipart/form-data" id="upload_file">
<fieldset><legend>Upload an image or video</legend>
<input type="file" id="file" name="file[]" placeholder="Upload Image or Video" multiple /><input type="submit" value="upload file" id="upload_file_btn" required />
</fieldset>
<div class="bar">
<div class="bar_fill" id="pb">
<div class="bar_fill_text" id="pt"></div>
</div>
</div>
</form>
</div>
<script>
function OnProgress(event, position, total, percentComplete){
//Progress bar
console.log(total);
$('#pb').width(percentComplete + '%') //update progressbar percent complete
$('#pt').html(percentComplete + '%'); //update status text
}
function beforeSubmit(){
console.log('ajax start');
}
function afterSuccess(data){
console.log(data);
}
$(document).ready(function(e) {
$('#upload_file').submit(function(event){
event.preventDefault();
var filedata = document.getElementById("file");
formdata = new FormData();
var i = 0, len = filedata.files.length, file;
for (i; i < len; i++) {
file = filedata.files[i];
formdata.append("file[]", file);
}
formdata.append("json",true);
$.ajax({
url: "global.func/file_upload.php",
type: "POST",
data: formdata,
processData: false,
contentType: false,
dataType:"JSON",
xhr: function() {
var myXhr = $.ajaxSettings.xhr();
return myXhr;
},
beforeSubmit: beforeSubmit,
uploadProgress:OnProgress,
success: afterSuccess,
resetForm: true
});
});
});
</script>
Tải lên hình ảnh hoạt động tốt, mảng gửi đến ajax nhưng thanh tiến trình không di chuyển. Trong thực tế, console.log cho hai chức năng được gọi là cần phải tạo ra điều này cũng không xuất hiện. Có một cách chính xác để gọi các chức năng trong yêu cầu ajax của tôi mà sẽ nhận được thanh tiến trình này để làm việc.
beforeSubmit: beforeSubmit, uploadProgress: OnProgress, thành công: afterSuccess,
Chú ý rằng chức năng này 'thành công: afterSuccess' đang làm việc như giao diện điều khiển được hiển thị dữ liệu của tôi.
Tại sao bạn không kiểm tra câu trả lời Eskinder không? Nó có vẻ hoàn thiện hơn với tôi. – Adam