如何使用ajax做进度条?进度信息如何返回?

JavaScript08

如何使用ajax做进度条?进度信息如何返回?,第1张

AJAX进度条一般不能反应真实进度(我只是说一般,你所见到的都是伪进度条),其原因就是因为这样做简单,而且用户体验还不错,\x0d\x0a实现方法如下:\x0d\x0a点击按钮或者干嘛干嘛一触发这个事件的时候,让进度条 从 0% 缓慢/迅速 增长到 20%。\x0d\x0abeforeSend 触发一个事件,让进度条 从20% 缓慢/迅速 增长到50%。\x0d\x0acomplete(状态)触发,进度条到 80%。\x0d\x0a将AJAX回调数据处理完成,进度到100%。\x0d\x0a\x0d\x0a------------------------------\x0d\x0a如果有更高层次要求的话,比如上传进度,要用侦听,每隔1秒或者多少毫秒提交一次AJAX请求来查询进度。比如上传之前,先把文件大小(假设100MB)保存在服务器上的某个Session或者变量里,上传的临时文件大小(假设某次提交侦听请求时,已经上传了5MB),两个数值一除,5%就出来了。。。

js其实是没法计算到网页的加载进度的。

目前见到的打开页面显示进度的有两种

1、如果是flash做的,那是flash自身的加载进度。

2、如果是js做的,做法比较简单,就是在页面的不同的地方插入script标签,动态改变进度的值。     

<html>

    <head>

        <script>

        var processPer = 0

        window.onload = function(){

            document.getElementById('process').innerHTML = processPer

        }

        </script>

    </head>

    <body>

        <div id="process"></div>

        <div></div>

        ....

        <script>

        processPer = 30

        document.getElementById('process').innerHTML = processPer

        </script>

        <div></div>

        ....

        <div></div>

        ....

        <script>

        processPer = 100

        document.getElementById('process').innerHTML = processPer

        </script>

    </body>

</html>

类似这样的,就可以实现了进度的动态改变。

ajax文件上传的进度条实现

<!DOCTYPE html>

<html>

<head>

<title>html5_2.html</title>

<meta http-equiv="content-type" content="text/htmlcharset=UTF-8">

<style type="text/css">

#parent{width:550pxheight:10pxborder:2px solid #09F}

#son {width:0height:100%background-color:#09Ftext-align:centerline-height:10pxfont-size:20pxfont-weight:bold}

</style>

<script type="text/javascript" src="js/jquery-1.9.1.js"></script>

<script type="text/javascript">

function showPic(){

var pic = $("#pic").get(0).files[0]

$("img").prop("src" , window.URL.createObjectURL(pic) )

uploadFile()

}

function uploadFile(){

var pic = $("#pic").get(0).files[0]

var formData = new FormData()

formData.append("file" , pic)

/**

* 必须false才会避开jQuery对 formdata 的默认处理

* XMLHttpRequest会对 formdata 进行正确的处理

*/

$.ajax({

type: "POST",

url: "upload",

data: formData ,

processData : false,

//必须false才会自动加上正确的Content-Type

contentType : false ,

xhr: function(){

var xhr = $.ajaxSettings.xhr()

if(onprogress &&xhr.upload) {

xhr.upload.addEventListener("progress" , onprogress, false)

return xhr

}

}

})

}

/**

* 侦查附件上传情况 ,这个方法大概0.05-0.1秒执行一次

*/

function onprogress(evt){

var loaded = evt.loaded//已经上传大小情况

var tot = evt.total //附件总大小

var per = Math.floor(100*loaded/tot) //已经上传的百分比

$("#son").html( per +"%" )

$("#son").css("width" , per +"%")

}

</script>

</head>

<body>

<img width="400" height="250"/><br />

<input type="file" id="pic" name="pic" onchange="showPic()"/>

<input type="button" value="上传图片" onclick="uploadFile()" /><br />

<div id="parent">

<div id="son"></div>

</div>

</body>

</html>