Javascript 带有上载的AJAX进度条
我有一个上传表单,它使用AJAX将数据传递到PHP进程文件以处理上传等。我正在尝试在上传文件时向表单添加进度条 我尝试了一些通过搜索找到的代码片段,但它们似乎不起作用。已尝试了以下多种变体:Javascript 带有上载的AJAX进度条,javascript,php,ajax,Javascript,Php,Ajax,我有一个上传表单,它使用AJAX将数据传递到PHP进程文件以处理上传等。我正在尝试在上传文件时向表单添加进度条 我尝试了一些通过搜索找到的代码片段,但它们似乎不起作用。已尝试了以下多种变体: $.ajax({ xhr: function () { var xhr = new window.XMLHttpRequest(); xhr.upload.addEventListener("progress", function (evt) { if (evt.length
$.ajax({
xhr: function () {
var xhr = new window.XMLHttpRequest();
xhr.upload.addEventListener("progress", function (evt) {
if (evt.lengthComputable) {
if (evt.lengthComputable) {
var percentComplete = evt.loaded / evt.total;
$('.progress').css({
width: percentComplete * 100 + '%'
});
if (percentComplete === 1) {
$('.progress').addClass('hide');
}
}
}
}, false);
xhr.addEventListener("progress", function (evt) {
if (evt.lengthComputable) {
var percentComplete = evt.loaded / evt.total;
$('.progress').css({
width: percentComplete * 100 + '%'
});
}
}, false);
return xhr;
},
url: "upload.php",
type: 'POST',
data: formData,
success: function (data) {
//success
}
});
但是,它们似乎都不起作用,我尝试过提醒
percentComplete
变量,它总是100,任何帮助都将不胜感激,谢谢。解决方案非常简单。我希望ajax请求仅在执行某些操作时触发,例如在按钮单击或某个事件上
现在,对于那个特定的事件,您确实需要启动进度条。有多个图书馆。并且,在收到响应时结束它
因此,守则将:
$(document).on("click","#button", function(){
console.log("Start"); //Start progress bar here
$.ajax({
"type": "POST",
"url": "upload.php",
"success": function()
{
console.log("end"); //End progress bar here
}
});
});
希望,逻辑很容易理解。解决方案很简单。我希望ajax请求仅在执行某些操作时触发,例如在按钮单击或某个事件上 现在,对于那个特定的事件,您确实需要启动进度条。有多个图书馆。并且,在收到响应时结束它 因此,守则将:
$(document).on("click","#button", function(){
console.log("Start"); //Start progress bar here
$.ajax({
"type": "POST",
"url": "upload.php",
"success": function()
{
console.log("end"); //End progress bar here
}
});
});
希望,逻辑很容易理解。我希望这有助于-
HTML-
<form id="data" method="post" enctype="multipart/form-data">
<input name="up_vid" type="file" id="up_vid"/>
<br><br>
<button id="uploadBtn">Begin Upload</button>
</form>
<br><br>
<div id="status">PROGRESS HERE</div>
开始上传
这里的进展
JS
$(文档).ready(函数(){
$(“#上载BTN”)。单击(函数(){
var formData=new formData($('#data')[0]);
console.log(formData);
$.ajax({
url:“/echo/html/”,
键入:“POST”,
数据:formData,
xhr:function(){
var xhr=new window.XMLHttpRequest();
xhr.upload.addEventListener(“进度”,函数(evt){
if(evt.长度可计算){
var percentComplete=evt.loaded/evt.total;
控制台日志(完成百分比);
$('#status').html('Uploading->'+(Math.round(percentComplete*100))+'%);
}
},假);
返回xhr;
},
成功:功能(数据){
$(“#status”).html('UPLOADED!!');
},
cache:false,
contentType:false,
processData:false
});
返回false;
});
});
现场演示-我希望这有助于-
HTML-
<form id="data" method="post" enctype="multipart/form-data">
<input name="up_vid" type="file" id="up_vid"/>
<br><br>
<button id="uploadBtn">Begin Upload</button>
</form>
<br><br>
<div id="status">PROGRESS HERE</div>
开始上传
这里的进展
JS
$(文档).ready(函数(){
$(“#上载BTN”)。单击(函数(){
var formData=new formData($('#data')[0]);
console.log(formData);
$.ajax({
url:“/echo/html/”,
键入:“POST”,
数据:formData,
xhr:function(){
var xhr=new window.XMLHttpRequest();
xhr.upload.addEventListener(“进度”,函数(evt){
if(evt.长度可计算){
var percentComplete=evt.loaded/evt.total;
控制台日志(完成百分比);
$('#status').html('Uploading->'+(Math.round(percentComplete*100))+'%);
}
},假);
返回xhr;
},
成功:功能(数据){
$(“#status”).html('UPLOADED!!');
},
cache:false,
contentType:false,
processData:false
});
返回false;
});
});
现场演示-您可以尝试修补此工作模板
<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
<style type="text/css">
#progressContainer {
display: inline-block;
overflow: hidden;
width: 400px;
height: 10px;
border: 1px solid #333333;
border-radius: 999px;
}
#progress {
display: block;
height: 100%;
background-color: green;
border-radius: 999px;
-o-transition: .1s;
-ms-transition: .1s;
-moz-transition: .1s;
-webkit-transition: .1s;
transition: .1s;
}
</style>
<div>
<form enctype="multipart/form-data" id="form1">
<input name="file" id="file" type="file" />
<input type="button" value="Upload" />
</form>
</div>
<div id="progress-text1">0%</div>
<span id="progressContainer">
<span id="progress" style="width:0%;"></span>
</span>
<div id="progress-text2">0%</div>
<div><progress value="0" id="progress1"></progress></div>
<script>
$('#file').on('change', function() {
$('#progress1').val('0');
});
$(':button').on('click', function() {
if( $('#file').val() == "" ) {
alert('Please choose a file before pressing upload..');
return;
}
var FD = new FormData($('#form1')[0]);
$(FD).serializeArray();
$.ajax({
url: 'fileupload-handler.php',
type: 'POST',
data: FD,
cache: false,
contentType: false,
processData: false,
success: function(data){
alert(data); // Do something with data received
$('#file').val("");
},
// this handles the progress bar
xhr: function() {
var myXhr = $.ajaxSettings.xhr();
if (myXhr.upload) {
myXhr.upload.addEventListener('progress', function(e) {
var percent_loaded = Math.ceil((e.loaded / e.total)*100);
$('#progress-text1').text(percent_loaded+'% has been uploaded..');
$('#progress-text2').text(percent_loaded+'% has been uploaded..');
$('#progress').css('width', percent_loaded + '%');
if (e.lengthComputable) {
$('progress').attr({
value: e.loaded,
max: e.total,
});
}
} , false);
}
return myXhr;
}
});
});
</script>
#进度容器{
显示:内联块;
溢出:隐藏;
宽度:400px;
高度:10px;
边框:1px实心#333333;
边界半径:999px;
}
#进展{
显示:块;
身高:100%;
背景颜色:绿色;
边界半径:999px;
-o-转变:.1s;
-ms转换:.1s;
-moz跃迁:.1s;
-webkit转换:.1s;
转换:.1s;
}
0%
0%
$('#file')。在('change',function()上{
$('#progress1').val('0');
});
$(':button')。在('click',function()上{
if($('#file').val()=“”){
警报('请在按上载之前选择文件…);
返回;
}
var FD=新的FormData($('#form1')[0]);
$(FD.serializeArray();
$.ajax({
url:'fileupload handler.php',
键入:“POST”,
数据:FD,
cache:false,
contentType:false,
processData:false,
成功:功能(数据){
警报(数据);//对收到的数据进行处理
$('#file').val(“”);
},
//这将处理进度条
xhr:function(){
var myXhr=$.ajaxSettings.xhr();
if(myXhr.upload){
myXhr.upload.addEventListener('progress',函数(e){
已加载变量百分比=数学单元((已加载/总计)*100);
$(“#progress-text1”).text(加载的百分比+%已上载..”);
$(“#progress-text2”).text(加载的百分比+%已上载..”);
$(“#进度”).css('width',加载百分比+'”);
if(如长度可计算){
$('progress').attr({
值:e.loaded,
马克斯:e.total,
});
}
},假);
}
返回myXhr;
}
});
});
您可以尝试修补此工作模板
<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
<style type="text/css">
#progressContainer {
display: inline-block;
overflow: hidden;
width: 400px;
height: 10px;
border: 1px solid #333333;
border-radius: 999px;
}
#progress {
display: block;
height: 100%;
background-color: green;
border-radius: 999px;
-o-transition: .1s;
-ms-transition: .1s;
-moz-transition: .1s;
-webkit-transition: .1s;
transition: .1s;
}
</style>
<div>
<form enctype="multipart/form-data" id="form1">
<input name="file" id="file" type="file" />
<input type="button" value="Upload" />
</form>
</div>
<div id="progress-text1">0%</div>
<span id="progressContainer">
<span id="progress" style="width:0%;"></span>
</span>
<div id="progress-text2">0%</div>
<div><progress value="0" id="progress1"></progress></div>
<script>
$('#file').on('change', function() {
$('#progress1').val('0');
});
$(':button').on('click', function() {
if( $('#file').val() == "" ) {
alert('Please choose a file before pressing upload..');
return;
}
var FD = new FormData($('#form1')[0]);
$(FD).serializeArray();
$.ajax({
url: 'fileupload-handler.php',
type: 'POST',
data: FD,
cache: false,
contentType: false,
processData: false,
success: function(data){
alert(data); // Do something with data received
$('#file').val("");
},
// this handles the progress bar
xhr: function() {
var myXhr = $.ajaxSettings.xhr();
if (myXhr.upload) {
myXhr.upload.addEventListener('progress', function(e) {
var percent_loaded = Math.ceil((e.loaded / e.total)*100);
$('#progress-text1').text(percent_loaded+'% has been uploaded..');
$('#progress-text2').text(percent_loaded+'% has been uploaded..');
$('#progress').css('width', percent_loaded + '%');
if (e.lengthComputable) {
$('progress').attr({
value: e.loaded,
max: e.total,
});
}
} , false);
}
return myXhr;
}
});
});
</script>
#进度容器{
显示:内联块;
溢出:隐藏;
宽度:400px;
高度:10px;
边框:1px实心#333333;
边界半径:999px;
}
#进展{
显示:块;
身高:100%;
背景颜色:绿色;
边界半径:999px;
-o-转变:.1s;
-ms转换:.1s;
-moz跃迁:.1s;
-webkit转换:.1s;