在 AJAX 调用成功响应时将数据推送到数组中会导致多次附加最后一个数据
Pushing the data in an array on success response of an AJAX call leads to appending the last data multiple times
我正在尝试在文件上传成功响应时将数据附加到数组中。
在循环控制台内给出了正确的输出,但结果数组由复制数据组成(最后的数据重复 n 次)
data : consists of multiple file data that has to be uploaded
示例:
文件列表{0:文件,1:文件,长度:2}
0:文件{name:"demoform1.pdf",lastModified:1565685422300,lastModifiedDate:2019 年 8 月 13 日星期二 14:07:02 GMT+0530(印度标准时间),webkitRelativePath:“”,大小:20061,...}
1:文件{name:"dummy.pdf",lastModified:1565260694049,lastModifiedDate:2019 年 8 月 8 日星期四 16:08:14 GMT+0530(印度标准时间),webkitRelativePath:“”,大小:13264,...}
长度:2
方法:
uploadToServer(data) {
for ( let i = 0 ; i < data.length ; i++ ) {
const fileType = this.fileValidations.getFileExtension(data[i].name);
const filetype = {file_type : fileType};
const data1 = {file : data[i]};
let uploadFormData;
uploadFormData = (Object as any).assign({}, data1, filetype);
this.fileUploadService.uploadFile(uploadFormData).subscribe(res => {
this.documentCount = this.documentCount + 1;
const currentFileName = data[i].name;
this.documentDetailsObj.name = res.original_name;
this.documentDetailsObj.id = res.id;
this.documentNameArr.push((this.documentDetailsObj));
console.log(this.documentNameArr);
// Expected output :
// 0: {name: "pdf1.pdf", id: 1}
// 1: {name: "pdf2.pdf", id: 2}
// Current Output :
// 0: {name: "pdf2.pdf", id: 2}
// 1: {name: "pdf2.pdf", id: 2}
}, error => {
console.log('error');
});
}
}
此处您将在下一次迭代中传递对象,同一对象通过引用传递进行更新。
this.documentDetailsObj.name = res.original_name;
this.documentDetailsObj.id = res.id;
this.documentNameArr.push((this.documentDetailsObj));
您可以只创建一个对象并将其推送到一行中,不需要额外的变量
this.documentNameArr.push({name: res.original_name, id: res.id});
我正在尝试在文件上传成功响应时将数据附加到数组中。 在循环控制台内给出了正确的输出,但结果数组由复制数据组成(最后的数据重复 n 次)
data : consists of multiple file data that has to be uploaded
示例:
文件列表{0:文件,1:文件,长度:2} 0:文件{name:"demoform1.pdf",lastModified:1565685422300,lastModifiedDate:2019 年 8 月 13 日星期二 14:07:02 GMT+0530(印度标准时间),webkitRelativePath:“”,大小:20061,...} 1:文件{name:"dummy.pdf",lastModified:1565260694049,lastModifiedDate:2019 年 8 月 8 日星期四 16:08:14 GMT+0530(印度标准时间),webkitRelativePath:“”,大小:13264,...} 长度:2
方法:
uploadToServer(data) {
for ( let i = 0 ; i < data.length ; i++ ) {
const fileType = this.fileValidations.getFileExtension(data[i].name);
const filetype = {file_type : fileType};
const data1 = {file : data[i]};
let uploadFormData;
uploadFormData = (Object as any).assign({}, data1, filetype);
this.fileUploadService.uploadFile(uploadFormData).subscribe(res => {
this.documentCount = this.documentCount + 1;
const currentFileName = data[i].name;
this.documentDetailsObj.name = res.original_name;
this.documentDetailsObj.id = res.id;
this.documentNameArr.push((this.documentDetailsObj));
console.log(this.documentNameArr);
// Expected output :
// 0: {name: "pdf1.pdf", id: 1}
// 1: {name: "pdf2.pdf", id: 2}
// Current Output :
// 0: {name: "pdf2.pdf", id: 2}
// 1: {name: "pdf2.pdf", id: 2}
}, error => {
console.log('error');
});
}
}
此处您将在下一次迭代中传递对象,同一对象通过引用传递进行更新。
this.documentDetailsObj.name = res.original_name;
this.documentDetailsObj.id = res.id;
this.documentNameArr.push((this.documentDetailsObj));
您可以只创建一个对象并将其推送到一行中,不需要额外的变量
this.documentNameArr.push({name: res.original_name, id: res.id});