使用Ajax异步上传图片的方法(html,javascript,php)
来源:互联网 发布:淘宝助理打开没有 编辑:程序博客网 时间:2024/05/21 18:47
前两天项目中需要用到异步上传图片和显示上传进度的功能,于是找了很多外国的文章,翻山越岭地去遇上各种坑,这里写篇文章记录一下。
HTML
<form id="fileupload-form"> <input id="fileupload" type="file" name="file" > </form>
HTML代码没什么好说,一个form表单,还有文件类型的input。我们来看js部分。
javascript
//绑定了`submit`事件。 $('#fileupload-form').on('submit',(function(e) { e.preventDefault(); //序列化表单 var serializeData = $(this).serialize(); // var formData = new FormData(this); $(this).ajaxSubmit({ type:'POST', url: *yoururl*, dataType: 'json', data: serializeData, // data: formData, //attention!!! contentType: false, cache: false, processData:false, beforeSubmit: function() { //上传图片之前的处理 }, uploadProgress: function (event, position, total, percentComplete){ //在这里控制进度条 }, success:function(){ }, error:function(data){ alert('上传图片出错'); } }); })); //绑定文件选择事件,一选择了图片,就让`form`提交。 $("#fileupload").on("change", function() { $(this).parent().submit(); });
PHP
<?php //通过$_FILES[]去获取文件 echo '$_FILES['file']';
遇到的坑:
- 序列化表单,因为是文件,不能通过
val()
,text()
等方法获取到它的值,只能通过序列化表单提交。代码里面使用.serialize()
,有另外一种做法是使用.FormData()
来提交,但是实验过程中,一开始正常,后来报错了。在stackoverflow.com上有人看到有人遇到同样地问题,没有解决,于是就放弃了。 - 普通的
ajax
是没办法或者说很难拿到上传进度的。这里使用了一个插件jQuery Form Plugin,使用方法很简单,原本ajax
的配置都能用,而且有很多实用功能和详尽的使用文档。推荐~ ajax
上传图片这三个参数必须配置contentType: false, cache: false, processData:false,
。- 获取本地预览图,这种方法可能会有浏览器兼容性问题。
$("#fileupload").change(function(){ if (this.files && this.files[0]) { var reader = new FileReader(); reader.onload = function (e) { $('#theImg').attr('src', e.target.result); } reader.readAsDataURL(this.files[0]); }}
- php部分注意虽然Ajax那里使用的是
POST
方法,但是后台接受的时候只要是文件都是用$_FILES
。你可以通过$_FILES['file']['type']
去判断文件格式来做安全处理,我们这里只是演示。还有其他参数,比如tmp_name
是文件路径,name
是文件名。后台接收以后,你可以使用move_uploaded_file()
来将文件保存到服务器上。这里就不多说。
其他补充
另外@_w同学补充,不刷新页面还可以通过设置form
的target
属性指向一个当前页面隐藏的iframe
来实现。让那个iframe
去刷新跳转页面。上面提到的jQuery Form Plugin也支持你这么做。
另外再推荐一个插件jquery-iframe-transport
推荐阅读
- uploading-files-with-ajax
- image-upload-example
- jquery-progress-bar-for-php-ajax-file-upload
javascript
方面我是新手,希望这篇文章能帮到更多遇到相同问题的人。如果哪里写的不好或者不对,还希望各位同行能够善意指出。
如需转载,请注明出处:http://www.w3ctrain.com/2015/07/11/uploading-image-with-ajax/
1 0
- 使用Ajax异步上传图片的方法(html,javascript,php)
- Ajax+PHP 异步上传图片
- php下使用ajax异步上传图片并显示缩略图
- php ajax上传图片的方法
- AJAX+PHP实现图片异步上传的实例详解
- php + html5 + ajax 异步上传图片
- 前端压缩图片+ajax+php 异步上传
- SpringMVC中Ajax异步上传图片的方法
- 基于PHP的AJAX技术实现文件异步上传方法
- wangEditor3使用AJAX异步上传图片
- ajax异步上传图片
- ajax异步上传图片
- ajax异步上传图片
- ajax异步上传图片
- php+jquery Ajax异步上传图片(ajaxSubmit)实例
- FileReader+Ajax+PHP实现异步上传图片和预览
- ajax图片上传,图片异步上传,更新
- ajax图片上传,图片异步上传,更新
- 第三十二讲|输出小星星
- HtmlHelper与扩展方法
- 《技术管理之巅:如何从零打造高质效互联网技术团队?》
- In与Exists的区别
- POJ 3264 Balanced Lineup(ST)
- 使用Ajax异步上传图片的方法(html,javascript,php)
- 数据结构与算法——插入类排序(直接插入排序,希尔排序)
- 【转载】职场人要远离的各种“负能量”
- mybatis 获取insert的id
- python入门读书笔记
- 每天一个linux命令(41):ps命令
- 第一个Python小程序
- 面向对象设计原则
- Android 判断手机是否连接网络