Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带有上载的AJAX进度条_Javascript_Php_Ajax - Fatal编程技术网

Javascript 带有上载的AJAX进度条

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将数据传递到PHP进程文件以处理上传等。我正在尝试在上传文件时向表单添加进度条

我尝试了一些通过搜索找到的代码片段,但它们似乎不起作用。已尝试了以下多种变体:

$.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;