anlinmb提供了更方便的ajax函数:anlin.ajax({参数对象})
,它可以防止重复请求以及设置超时时间,并且可以更方便的支持表单提交,文件上传以及指定文件类型
参数 | 说明 |
---|---|
url: | 请求的目标url,它不可以跨域请求 |
h: | 当前按钮对象(防止请求中重复点击),默认可以填写当前对象this |
dataType: | 设置返回的数据类型,如:json,html,text,script |
formId: | 使用post请求,form标签的id(此id是唯一值,一个页面多个表单不能使用相同id) |
time: | 设置超时时间(毫秒),不设置 默认3000=30秒 |
f: | 请求成功后的回调函数function(a){...} |
file_load: | 文件上传中监听运行回调函数function(e){...} |
error: | 请求出错时运行函数function(jqXHR,textStatus,errorThrown){...} |
obj:{} | 其它对象,可移植jquery的ajax对象,例: obj:{ beforeSend: function(xhr) {xhr.overrideMimeType("text/txt;charset=gb2312"); } } |
普通的GET请求数据
<div id="anlin-ajax">请求成功后此区域会显示数据</div>
<button type="button">点我发送GET请求</button>
<script>
$("button").click(function(){
anlin.ajax({
url:'/xxx.php?w=111',
dataType:'html',
time:30000,
f:function(aa){
$('#anlin-ajax').text(aa);//成功获取数据
},
error:function(){alert('加载出错请重试');}
});
});
</script>
post表单与文件上传
我们提供了一个文件选择器函数:anlin.show(参数1,参数2,{参数3对象})
使用它时您必须确保form内拥有id=file的文件选择器
参数1: | form表单的唯一id(他不是选择器不要添加#) |
参数2: | 将已选择的文件预览内容添加到指定元素内(选择器) |
参数3对象: | { type:['jpg','png'],//指定允许的文件类型(数组形式),如: ['jpg','png'...],不设置则没有文件类型限制 filen:1,//限制文件数量,不设置则没有限制 h:this//它有两个参数this代表文件达到指定数量时当前添加文件按钮自动消失,不设置或为其它参数时按钮始终存在 } |
完整示例:
<style>
button{margin-left:10px;margin-top:5px;width:100px;height:35px;line-height:35px;text-align:center;}
</style>
<form method="post" enctype="multipart/form-data" id="form-id">
<!--表单数据-->
<input name="name" value="wodeid">
<!--设置一个隐藏的文件选择框并添加id=file 此id必须为file-->
<input id="file" type="file" name="file[]" style="display:none;">
<!--选择文件,如果您不需要上传文件只需将以下代码删除即可-->
<div class="fimg">
<div id="imgid"></div>
<!--设置anlin.show参数3为限制上传2个文件-->
<li onclick="anlin.show('form-id','#imgid',{filen:2,h:this});"><a style="font-size:300%;">+</a></li>
</div>
<!--提交上传-->
<button style="" type="button" onclick="anlin.ajax({
url:'/xxx.php',
h:this,
formId:'form-id',
dataType:'html',
time:50000,
f:function(aa){alert(aa);},
error:function(){alert('加载出错请重试');}
});">提交</button>
</form>
<br>
<p>下面将实现一个更棒的文件上传效果,提交后显示loading和文件上传进度</p>
<br>
<form method="post" enctype="multipart/form-data" id="form-id2">
<!--表单数据-->
<input name="name" value="维森莫">
<!--设置一个隐藏的文件选择框并添加id=file 此id必须为file-->
<input id="file" type="file" name="file[]" style="display:none;">
<!--选择文件,如果您不需要上传文件只需将以下代码删除即可-->
<div class="fimg">
<div id="imgid2"></div>
<li onclick="anlin.show('form-id2','#imgid2');"><a style="font-size:300%;">+</a></li>
</div>
<!--提交上传-->
<button id="bttt" type="button">提交</button>
</form>
<script>
$("#bttt").click(function(){
anlin.fs('<center><img src="https://loading.io/mod/spinner/dual-ball/index.svg"><div id="lofile">加载中...</div></center>');
anlin.ajax({
url:'/xxx.php',
h:this,
formId:'form-id2',
dataType:'html',
time:50000,
file_load:function (e) {
var progressRate = (e.loaded / e.total) * 100 + '%';
$('#lofile').html('文件上传中('+progressRate+')');
},
f:function(aa){anlin.fs(false);alert(aa);},
error:function(){
anlin.fs(false);
alert('加载出错请重试');}
});
});
</script>
文件类型与文件预览样式设置,下面例子中限制了只允许选择zip和rar后缀的文件,并通过CSS设置预览图标或文本
CSS样式设置自定义后缀文件预览图标方法:
.anlin-file-文件后缀名::before {
content:' ';
display:block;
width: 80px;
height: 80px;
background:url(/xxx.png);//图标地址
background-size:cover;
}
<style>
button{margin-left:10px;margin-top:5px;width:100px;height:35px;text-align:center;}
/**CSS设置非图片文件预览图标或文本**/
.anlin-file-zip::before {
/**设置zip图标**/
content:' ';
display:block;
width: 70px;
height: 70px;
background:url(https://cdn0.iconfinder.com/data/icons/leto-file-formats/64/zip_compressed_file_format-128.png);
background-size:cover;
font-size:110%;
}
.anlin-file-rar::before {
content:"rar压缩包";
font-size:110%;
}
</style>
<p>我们现在设置了zip文件的图标,选择zip文件看看效果</p>
<form method="post" enctype="multipart/form-data" id="form-id">
<input id="file" type="file" name="file[]" style="display:none;">
<div class="fimg">
<div id="imgid"></div>
<li onclick="anlin.show('form-id','#imgid',{type:['zip','rar']});"><a style="font-size:300%;">+</a></li>
</div>
<!--提交上传-->
<button style="" type="button" onclick="anlin.ajax({
url:'/xxx.php',
h:this,
formId:'form-id',
dataType:'html',
time:50000,
f:function(aa){alert(aa);},
error:function(){alert('加载出错请重试');}
});">提交</button>
</form>
php后台接收上传文件示例:
$file=@$_FILES['file'];
$co=@count($file['name']);
for($i=0;$i<=$co-1;$i++){
if($file['name'][$i]!=''&&$file['error'][$i]==0){
echo $file['name'][$i];
echo "\n";
move_uploaded_file($file["tmp_name"][$i], "upload/" . $file["name"][$i]);
echo "文件存储在: " . "upload/" . $file["name"][$i];
}
}
终止请求
anlin.ajax每次请求都会返回一串唯一标识,可以通过anlin.xajax();
来终止请求,但最终结果可能只是跳过成功后的函数运行
<div id="anlin-ajax">请求成功后此区域会显示数据</div>
<button type="button">点我请求数据,立即终止请求并运行错误</button>
<script>
$("button").click(function(){
var aq=anlin.ajax({
url:'/xxx.php?w=111',
dataType:'html',
time:30000,
f:function(aa){
$('#anlin-ajax').text(aa);//成功获取数据
},
error:function(){$('#anlin-ajax').text('请求出错');}
});
anlin.xajax(aq);//终止请求
});
</script>