织梦ajax上传图片,使用Ajax异步上传图片的方法(html,javascript,php)

前两天项目中需要用到异步上传图片和显示上传进度的功能,于是找了很多外国的文章,翻山越岭地去遇上各种坑,这里写篇文章记录一下。

HTML

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

遇到的坑:

序列化表单,因为是文件,不能通过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方面我是新手,希望这篇文章能帮到更多遇到相同问题的人。如果哪里写的不好或者不对,还希望各位同行能够善意指出。

相关报道:

class Types(models.Model): title=models.CharField(主题,max_length=20,null =False, blank=False,) sortid = models.IntegerField(关联sort,null =True, blank=True) class Meta:www.2cto.com db_table = Types verbose_name = 类型 verbose_name_plural = 更多

一、概念的解释 1. rsa 与 rsa.pub 网上很容易搜到的东西我就不说了,我们知道,通过: ssh-keygen -t rsa -C something 可以生成两个文件,这两个文件的命名默认是 id_rsa 和 id_rsa.pub,如果你在键入上述命令回车之后,重新输入了命名,那此时生成的两个文 更多

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值