Ajax完整写法及实现加载进度条效果
<script type="text/javascript">
//批量发卡指令
$('#addmanycard').click(function(){
var msgid=layer.msg('正在批量发卡中...', {icon: 16,shade: [0.8, '#393D49'],time:false,});
var id = $(this).attr('id');
$.ajax({
type:"POST",
url:"{:url('admin/doorcontroller/addmanycard')}",
data:"type="+id+"&doordata="+doordata,
dataType:"json",
xhr: function() { //ajax进度条
var xhr = $.ajaxSettings.xhr();
if (onprogress && xhr.upload) {
xhr.upload.addEventListener("progress", progressBar, false);
return xhr;
}
},
beforeSend: function() {
//请求前的处理
layer.close(msgid);//手动关闭
layer.msg('已下载10%');
},
success:function(data){
layer.close(msgid);//手动关闭
layer.msg(data.msg);
},
error: function (error) {
alert(" error : " + error.responseText);
}
});
})
$.ajax({
url: "http://www.microsoft.com", //请求的url地址
dataType: "json", //返回格式为json
async: true, //请求是否异步,默认为异步,这也是ajax重要特性
data: {
"id": "value"
}, //参数值
type: "GET", //请求方式
processData: false, //对表单data数据是否进行序列化
contentType: false, //dataType设置你收到服务器数据的格式
xhr: function() { //ajax进度条
var xhr = $.ajaxSettings.xhr();
if (onprogress && xhr.upload) {
xhr.upload.addEventListener("progress", progressBar, false);
return xhr;
}
},
beforeSend: function() {
//请求前的处理
},
success: function(req) {
//请求成功时处理
},
complete: function() {
//请求完成的处理
},
error: function() {
//请求出错处理
}
});
//进度方法
/**
* 侦查附件上传情况,这个方法大概0.05-0.1秒执行一次
*/
function progressBar(evt) {
var loaded = evt.loaded; //已经上传大小情况
var tot = evt.total; //附件总大小
var per = Math.floor(100 * loaded / tot); //已经上传的百分比
$.fn.progressInit.draw(per + '%'); //绘制经度条
}
</script>先说说这个 beforeSend, 在请求发送前执行 比如 可以判断用户有没有登录 ,如果没有登录就停止请求 并提示。
$.ajax({
url : 'my_action',
dataType: 'script',
beforeSend : function(xhr, opts){
if(1 == 1) //just an example
{
xhr.abort(); // 停止请求
}
},
complete: function(){
console.log('DONE');
}
});$.ajax有一个参数是complete:function(){} 是在 请求完成之后执行的 ,配合beforeSend可以用来展示进度条
$.ajax({
url : 'my_action',
dataType: 'script',
beforeSend : function(){
// 设置 进度条到20%慢慢变到50%
},
complete: function(){
// 设置 进度条到80%
}
success:function(){
// 渲染页面
// 进度到100%
}
});这个只是表面上的看到的进度条 ,展示大概的进度,并不是真正的加载进度。
