微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用包含文件和后期数据的JavaScript创建AJAX请求

如何创建一个HTTP请求,该请求使用可由PHP服务器接收的JavaScript发送一个文件和一些发布数据?

我发现了以下建议,但似乎并不完整

xhr.open("POST", "upload.PHP");
var boundary = '---------------------------';
boundary += Math.floor(Math.random()*32768);
boundary += Math.floor(Math.random()*32768);
boundary += Math.floor(Math.random()*32768);
xhr.setRequestHeader("Content-Type", 'multipart/form-data; boundary=' + boundary);
var body = '';
body += 'Content-Type: multipart/form-data; boundary=' + boundary;
//body += '\r\nContent-length: '+body.length;
body += '\r\n\r\n--' + boundary + '\r\n' + 'Content-disposition: form-data; name="';
body += 'myfile"; filename="'+file.fileName+'" \r\n';
body += "Content-Type: "+file.type;
body += '\r\n\r\n';
body += file.getAsBinary();
body += '\r\n'
body += '--' + boundary + '\r\n' + 'Content-disposition: form-data; name="submitBtn"\r\n\r\nUpload\r\n';
body += '--' + boundary + '--';
xhr.setRequestHeader('Content-length', body.length);

为了实现这一点,我需要一个包含输入类型文件字段的“文件”变量,但是在哪里放置额外的帖子数据?我也想发送一个描述文本.假设我还需要使用xhr.send发送请求…

解决方法:

其他POST数据应作为另一个Content-disposition放置.例:

Content-Type: multipart/form-data; boundary=AaB03x

--AaB03x
Content-disposition: form-data; name="submit-name"

Larry
--AaB03x
Content-disposition: form-data; name="files"; filename="file1.txt"
Content-Type: text/plain

... contents of file1.txt ...
--AaB03x--

这里发送了两个变量:要上传文件名称=“submit-name”的输入和值Larry.您可以拥有与要POST的变量一样多的Content-disposition.

当然,如果你使用像jQuery这样的js框架,那么大部分的管道都可以简化.这是excellent plugin应该是do the job.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐