一次上传照片
upload photos at a time
我试图上传更多的照片在同一对象XMLHttpRequest。
if(files.length <= 6) {
for(var i = 0; i < files.length; i++) {
var formData = new FormData();
formData.append('action', 'uploadPhoto');
formData.append('photo_id', id);
formData.append('file'+id, files[i]);
UploadFile(formData, id); }
}
function UploadFile(formData, id) {
var xhr = new XMLHttpRequest();
xhr.open('POST', 'uploadPhoto.php', false);
xhr.onload = function (){};
xhr.send(formData); }
问题是照片上传是重复相同的。我想这是因为循环还在继续而上传的照片没有完成
从注释中可以看出,您的id
是一个随机数,我猜测在每次迭代中需要是随机的。但是,您已经将它设置在for循环之外,因此它将在每个循环中被覆盖,因此您只看到一个文件上传。根据您使用的随机函数,您可能会再次生成相同的数字,并以与此处相同的方式随机覆盖文件。
这里我使用了时间戳技术,它在执行操作时总是唯一的。试试这个:
if(files.length <= 6) {
for(var i = 0; i < files.length; i++) {
var id =Date().getTime();
var formData = new FormData();
formData.append('action', 'uploadPhoto');
formData.append('photo_id', id);
formData.append('file'+id, files[i]);
UploadFile(formData, id); }
}
function UploadFile(formData, id) {
var xhr = new XMLHttpRequest();
xhr.open('POST', 'uploadPhoto.php', false);
xhr.onload = function (){};
xhr.send(formData); }
在for
循环之外(之后)调用uploadPhoto()
,而不是在每次循环迭代结束时调用。另外,将FormData
声明移到循环之外。
我还修改了原始的"photo_id"参数以包含循环计数器值,因此您将为每个文件拥有不同的photo_id参数键。
另外,我将您调用的最后一个参数更改为xhr。对"真实"敞开心扉。您的代码正在进行同步xhr调用。这通常是个坏主意。我将最后一个参数切换为"false",使xhr调用异步化。
最后,我删除了uploadPhoto
函数的id参数,因为您无论如何都不使用它。
我还把你上传功能的第一个字母改成了小写。只有当函数是构造函数时,才应该以大写字母开头。这是一个广为接受的惯例。你的代码应该看起来像这样:
if(files.length <= 6) {
var formData = new FormData();
for(var i = 0; i < files.length; i++) {
var id = getUuid();
formData.append('action', 'uploadPhoto');
formData.append('photo_' + i + "_id", id);
formData.append('file'+id, files[i]);
}
uploadFile(formData);
}
function uploadFile(formData) {
var xhr = new XMLHttpRequest();
xhr.open('POST', 'uploadPhoto.php', true);
xhr.send(formData);
}
function getUuid() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
return v.toString(16);
});
}
getUuid函数来自https://stackoverflow.com/a/2117523/486979。注意,它生成一个版本4的UUID。
相关文章:
- Javascript返回值只在循环中返回一次
- Jquery FadeIn FadeOut 只工作一次
- Javascript html每点击一次就会更改url
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- Rails操作只调用一次,但我在ajax中每秒钟都调用一次
- jQuery滚动功能只工作一次
- 刷新导致我的帖子“;张贴“;再一次
- 引导程序崩溃一次只能看到一个
- 有没有一个抽象层,这样我就可以集成一次,然后使用pusher、pubnub或faye
- 加载器组件仅加载一次
- 根据Angular.JS上一次的内容禁用选择
- 一次又一次地在新的和相同的选项卡中打开一个url
- 只在宽度以下和宽度以上各准备一次
- 如果30秒未单击,请应用CSS一次,将其删除,然后重新迭代
- Angularjs:空对象,当只有一次点击时
- 在Angular应用程序中每个帖子投票一次
- 背景图像旋转器.php + jQuery每4秒显示一次随机照片
- 逐个查看文件夹中的照片,并根据一次击键移动到特定文件夹,具体取决于击键
- 一次上传照片
- 如何一次从几个id中获取照片和名字