将数组输入发送到后端时,Dropzone 插入与相同数量文件相同数量的值
Dropzone inserting the same number of values as the same number of files when sending array inputs to backend
我有一个简单的保管箱,可以在单击按钮时手动上传文件:
var dropzone = $("#dropzone-form").dropzone({
autoProcessQueue: false,
addRemoveLinks: true,
paramName: "fotos",
url: url,
uploadMultiple: true,
init: function(){
var dropzone_object = this;
$('#btn-guardar').on('click', function(e){
if(checkForm()){
if(dropzone_object.files.length > 0){
dropzone_object.processQueue();
}else{
sendWithoutFiles();
}
}
});
},
sending: function(file, xhr, formData) {
var formValues = $('#form-productos').serializeArray();
$.each(formValues, function(i, obj){
formData.append(obj.name, obj.value);
});
},
success: function(file, response){
},
error: function(file, errorMessage, xhr){
}
});
但是我在上传多个文件时遇到了问题,因为我的表单中有数组输入,id 为 form-productos
,例如:
<input name="emails[]">
或
<select name="colors[]"></select>
因此,对于 dropzone 队列具有的每个文件,它再次附加输入,不是数组输入的输入没有问题,因为该值再次被覆盖,所以假设我有以下输入(注意值):
<input name="emails[]" value="email1">
<input name="emails[]" value="email2">
而且,假设我有 2 个文件在队列中,当我按下按钮并且数据被发送到 PHP 时,我在打印“$request->emails
时得到以下信息":
array(
'email1',
'email2', //After this, since I uploaded two files, I get the same values again:
'email1',
'email2'
)
阅读 dropzone documentation 清楚地表明这是正确的行为:
sending: Called just before each file is sent. Gets the xhr object and
the formData objects as second and third parameters, so you can modify
them (for example to add a CSRF token) or add additional data.
所以,问题出在我这边,在追加到 formData
时我能做些什么来防止这种情况?
我解决了用 sendingmultiple
轻松替换 send
事件的问题,当 uploadMultiple
选项设置为 true
时,大多数情况下应该使用此事件:
sendingmultiple: function(files, xhr, formData) {
var formValues = $('#form-productos').serializeArray();
$.each(formValues, function(i, obj){
formData.append(obj.name, obj.value);
});
},
不同的是这个事件接收一个文件数组作为第一个参数,这样事件里面的过程只做一次。
我有一个简单的保管箱,可以在单击按钮时手动上传文件:
var dropzone = $("#dropzone-form").dropzone({
autoProcessQueue: false,
addRemoveLinks: true,
paramName: "fotos",
url: url,
uploadMultiple: true,
init: function(){
var dropzone_object = this;
$('#btn-guardar').on('click', function(e){
if(checkForm()){
if(dropzone_object.files.length > 0){
dropzone_object.processQueue();
}else{
sendWithoutFiles();
}
}
});
},
sending: function(file, xhr, formData) {
var formValues = $('#form-productos').serializeArray();
$.each(formValues, function(i, obj){
formData.append(obj.name, obj.value);
});
},
success: function(file, response){
},
error: function(file, errorMessage, xhr){
}
});
但是我在上传多个文件时遇到了问题,因为我的表单中有数组输入,id 为 form-productos
,例如:
<input name="emails[]">
或
<select name="colors[]"></select>
因此,对于 dropzone 队列具有的每个文件,它再次附加输入,不是数组输入的输入没有问题,因为该值再次被覆盖,所以假设我有以下输入(注意值):
<input name="emails[]" value="email1">
<input name="emails[]" value="email2">
而且,假设我有 2 个文件在队列中,当我按下按钮并且数据被发送到 PHP 时,我在打印“$request->emails
时得到以下信息":
array(
'email1',
'email2', //After this, since I uploaded two files, I get the same values again:
'email1',
'email2'
)
阅读 dropzone documentation 清楚地表明这是正确的行为:
sending: Called just before each file is sent. Gets the xhr object and the formData objects as second and third parameters, so you can modify them (for example to add a CSRF token) or add additional data.
所以,问题出在我这边,在追加到 formData
时我能做些什么来防止这种情况?
我解决了用 sendingmultiple
轻松替换 send
事件的问题,当 uploadMultiple
选项设置为 true
时,大多数情况下应该使用此事件:
sendingmultiple: function(files, xhr, formData) {
var formValues = $('#form-productos').serializeArray();
$.each(formValues, function(i, obj){
formData.append(obj.name, obj.value);
});
},
不同的是这个事件接收一个文件数组作为第一个参数,这样事件里面的过程只做一次。