ajax form.append属性,使用jQuery.ajax发送multipart / formdata

只是想为拉斐尔的回答添加一些内容。$_FILES无论您是否使用JavaScript提交,以下是如何让PHP生成相同的内容。

HTML表单:

PHP $_FILES在没有JavaScript的情况下提交时生成:Array

(

[media] => Array

(

[name] => Array

(

[0] => Galata_Tower.jpg

[1] => 518f.jpg

)

[type] => Array

(

[0] => image/jpeg

[1] => image/jpeg

)

[tmp_name] => Array

(

[0] => /tmp/phpIQaOYo

[1] => /tmp/phpJQaOYo

)

[error] => Array

(

[0] => 0

[1] => 0

)

[size] => Array

(

[0] => 258004

[1] => 127884

)

)

)

如果你进行渐进增强,使用Raphael的JS提交文件......var data = new FormData($('input[name^="media"]'));     jQuery.each($('input[name^="media"]')[0].files, function(i, file) {

data.append(i, file);});$.ajax({

type: ppiFormMethod,

data: data,

url: ppiFormActionURL,

cache: false,

contentType: false,

processData: false,

success: function(data){

alert(data);

}});

...这是PHP的$_FILES数组在使用JavaScript提交之后的样子:Array

(

[0] => Array

(

[name] => Galata_Tower.jpg

[type] => image/jpeg

[tmp_name] => /tmp/phpAQaOYo

[error] => 0

[size] => 258004

)

[1] => Array

(

[name] => 518f.jpg

[type] => image/jpeg

[tmp_name] => /tmp/phpBQaOYo

[error] => 0

[size] => 127884

)

)

这是一个很好的数组,实际上有些人会变换$_FILES,但我发现使用相同的数据是有用的$_FILES,无论JavaScript是否用于提交。所以,这里有一些JS的小改动:// match anything not a [ or ]regexp = /^[^[\]]+/;var fileInput = $('.putImages input[type="file"]');

var fileInputName = regexp.exec( fileInput.attr('name') );

// make files availablevar data = new FormData();

jQuery.each($(fileInput)[0].files, function(i, file) {

data.append(fileInputName+'['+i+']', file);});

(2017年4月14日编辑:我从FormData()的构造函数中删除了表单元素 - 在Safari中修复了此代码。)

那段代码做了两件事。input自动检索name属性,使HTML更易于维护。现在,只要form有类putImages,其他一切都会自动处理。也就是说,input不需要任何特殊名称。

普通HTML提交的数组格式由data.append行中的JavaScript重新创建。注意括号。

通过这些更改,现在使用JavaScript $_FILES提交与使用简单HTML提交的数组完全相同。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值