博客列表 >$.ajax--异步表单文件上传-----2018年04月20日

$.ajax--异步表单文件上传-----2018年04月20日

失去过去的博客
失去过去的博客原创
2018年04月20日 19:49:15817浏览

$.ajax--异步表单文件上传:

1.除了传统的表单提交方式,然而传统方式已经不再满足客户需求 ,需要更好的体验,那么采用jQuery中的 $.ajax()来实现表单文件的上传。当然对于初学者 有太多的坑,话不多说 有图有真相,

QQ截图20180420191928.jpgQQ截图20180420192102.jpg

1.1先附上 前端文件源码  

实例

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1.0" />
	<meta http-equiv="X-UA-Compatible" content="ie=edge" />
	<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
	<script src="http://apps.bdimg.com/libs/layer/2.1/layer.js" type="text/javascript" charset="utf-8"></script>
	<title>实战:文件上传</title>
	<style type="text/css">
		*{margin: 0;padding: 0;}
		body{
			background: url(../../images/2.jpg)no-repeat;
	
			overflow: hidden;background-size:500% ;background-position-y:-200px;
			
		}
		.container{
			height: 600px;
			width: 500px;
			background-color: rgba(0,0,0,0.5);
			margin: 100px auto;
			border-radius: 10px;
			margin-top: 250px;
			
		}
		img{
			display: block;
			width: 360px;
			height: 400px;
			background-color: aquamarine;
			margin: 30px auto;
			box-shadow: 5px 5px 1px #8E8C8C;
			border-radius:10px ;
			
			
		}
		h2{
			text-align: center;
			color: white;padding-top:20px ;
			
		}
		.btn{
			width: 150px;height: 30px;
			background: coral;border: none;
			border-radius: 3px;color: white;
			margin-left: 66px;
			cursor: pointer;
		}
		.btn:hover{
			font-size: 1.02em;
			background: orange;
		}
	
		
	</style>
	
</head>
<body>
	<!--
    	作者:1083396620@qq.com
    	时间:2018-04-19
    	描述:
    	实战之前我们先来学习下一个系统函数 $_FILES 该函数是一个二维数组
    	一维就是要上传的表单name的属性 二维重要的有以下几个数组元素
		$_FILES['input中name属性']['name']
			1.$_FILES['file']['name']  上传文件的名称	
			2.$_FILES['file']['type']	上传文件的类型
			3.$_FILES['file']['size']	上传文件的大小
			4.$_FILES['file']['tmp_name'] 上传文件的临时文件夹
			5.$_FILES['file']['error']  错误信息
    		
    	
    	
    -->
	<div class="container">
		<h2>头像预览</h2>
		<div class="pic">
			<img src="../../php中文网练习/jQuery/images/7.png" />
		</div>
		<form id="info" enctype="multipart/form-data" onsubmit="return false">
	
			
				<p><input type="file" name="file" id="file" value="" /></p>
				<p><input type="hidden" name="MAX_FILE_SIZE" id="hide" value="512042488" /></p>
				<p><input type="submit" name="button" id="button"class="btn" value="上传图片" />
				<input type="reset" name="reset" id="reset" class="btn" value="重新填写" /></p>
				

			
		</form>
	</div>	
</body>
<script type="text/javascript">
	$(function(){
		$('#button').click(function(){
		
				
		
			
//		1.使用html5中的方法 FormData对象方法提交表单数据	
				//创建空对象
		var formdata =  new FormData($('#info')[0])
		  	//传入参数
//		  	formdata.append('file',$('#file').val())
//		  	formdata.append('MAX_FILE_SIZE',$('#hide').val())
			 $.ajax({
				  url:'requied.php',
				  type: 'POST',
				  data:formdata,
				  dataType:'json',
				  contentType: false,//禁止设置请求类型
				 processData:false,// 禁止jq对数据的处理 因为在FormData对象中已经处理了
				  success:function(res){
						
						switch (res.status){
							case '200':
								layer.tips(res.msg, '.pic img', {
									  tips: [1, '#3595CC'],
									  time: 8000
								});	
								break;
							case '1':
								layer.tips(res.msg, '.pic img', {
									  tips: [1, '#3595CC'],
									  time: 8000
								});	
								var index = layer.load(0, {shade: false});
								break;
							case '2':
								layer.tips(res.msg, '.pic img', {
									  tips: [1, '#3595CC'],
									  time: 8000
								});	
								break;
							case '3':
								layer.tips(res.msg, '.pic img', {
									  tips: [1, '#3595CC'],
									  time: 8000
								});	
								break;
							case '4':
								layer.tips(res.msg, '.pic img', {
									  tips: [1, '#3595CC'],
									  time: 8000
								});	
								var index = layer.load(0, {shade: false});
								break;
							case '6':
								layer.tips(res.msg, '.pic img', {
									  tips: [1, '#3595CC'],
									  time: 8000
								});	
								break;
							case '7':
								layer.tips(res.msg, '.pic img', {
									  tips: [1, '#3595CC'],
									  time: 8000
								});	
								break;	
							case '8':
								layer.tips(res.msg, '.pic img', {
									  tips: [1, '#3595CC'],
									  time: 8000
								});	
								break;	
							case '5':
								layer.tips(res.msg, '.pic img', {
									  tips: [1, '#3595CC'],
									  time: 8000
								});	
								break;									
							default:
								
								layer.tips('未知错误', '.pic img', {
									  tips: [1, '#3595CC'],
									  time: 8000
								});	
								break;
						}
						
						
				  $('.pic img').attr('src', '/php/0419/upload/'+res.src);
				  }
				 })

	

		})
	})
</script>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

1.2 对于html有一个槽点 就是一定要采用submit提交 一定要禁用  默认事件 enctype 一定要是multipart/form-data

<form id="info" enctype="multipart/form-data" onsubmit="return false"> 在php中获取不到$_FILES 超级变量就是这个没有设置好

1.3js中 采用h5中新增的方法 FormData 方法 详细使用方法请百度

2.php代码  不太完善还可以增加上传文件大小判断等  看代码

实例

<?php
	//请求传递方式是否为post

	if($_SERVER['REQUEST_METHOD']=='POST') {
			//检测文件是否被上传
			if(isset($_FILES['file'])){
				//设置文件上传的类型
				$images = ['image/png','image/jpg','image/jpeg'];
				//p判断是否在数组中
				if(in_array($_FILES['file']['type'], $images)){
					//将文件移动到临时目录并移动到上传目录
					if(move_uploaded_file($_FILES['file']['tmp_name'],"upload/{$_FILES['file']['name']}")){
						echo json_encode(['status'=>'200','msg'=>'恭喜你!!!文件上传成功','src'=>"{$_FILES['file']['name']}"]);
						
					}
					
				}else{
					exit (json_encode(['status'=>'5','msg'=>'文件类型不正确,请重新上传']));
				}
			}
			
				if($_FILES['file']['error'] > 0){
					switch ($_FILES['file']['error']) {
						case '1':
							echo json_encode(['status'=>'1','msg'=>'很遗憾!!!文件超过了php.ini配置中设置的大小']);
								
							break;
						case '2':
							
							echo json_encode(['status'=>'2','msg'=>'很遗憾!!!文件超过了表单中常量设置的大小']);
							break;
						case '3':
						
							echo json_encode(['status'=>'3','msg'=>'很遗憾!!!仅有部分文件被上传']);
							break;
						case '4':
						
							echo json_encode(['status'=>'4','msg'=>'很遗憾!!!没有文件被上传']);
							break;
						case '6':
						
							echo json_encode(['status'=>'6','msg'=>'很遗憾!!!没有可用的临时文件夹']);
							break;				
						case '7':
							
							echo json_encode(['status'=>'7','msg'=>'很遗憾!!!磁盘已满,写入失败']);
							break;
						case '8':
							
							echo json_encode(['status'=>'8','msg'=>'很遗憾!!!上传意外中止']);
							break;	
						default:
						
							echo json_encode(['status'=>'9','msg'=>'很遗憾!!!文件上传失败 ,返回未知错误']);
							break;
					};
					
				};
}else{
		echo '<pre>';

		exit(json_encode(['status'=>'404',"当前的请求方式是:{$_SERVER['REQUEST_METHOD']}"]));
		
};
	
	
	
	
?>

运行实例 »

点击 "运行实例" 按钮查看在线实例


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议