2014-01-29 5 views
12

Here способ append файл в FormData:Как удалить значение из FormData

var data = new FormData(); 
    jQuery.each($('#file')[0].files, function(i, file) { 
      data.append('file-'+i, file); 
    }); 

это можно сделать, как показано ниже?

 data[i].remove();??? 
or data[i] = file;?? 

как iIcan удалить или изменить значение из data

+0

Проверьте значение 'data' в firebug или на консоли Chrome, если сможете. – bozdoz

+0

Мне кажется, что метод удаления недоступен. Идея с FormData заключается в том, что она предназначена для создания простой AJAX-оболочки для элемента формы и позволяет добавлять дополнительные данные перед отправкой запроса. Если вы хотите удалить элементы, я предлагаю работать с библиотекой, например jQuery, или создавать свою собственную оболочку AJAX, которая ожидает стандартный объект, чтобы вы могли добавлять и удалять элементы по своему усмотрению. https://developer.mozilla.org/en-US/docs/Web/Guide/Using_FormData_Objects –

ответ

22

Вы не можете ничего другого, кроме добавления элементов в объект FormData сделать. См. the Spec. Было бы лучше, если бы вы использовали словарь/объект для хранения всех значений, которые вы хотите добавить/изменить, прежде чем создавать объект.

var data = {}; 
jQuery.each($('#file')[0].files, function(i, file) { 
    data['file-'+i] = file; 
}); 

//modify the object however you want to here 

var formData = new FormData(); 
for (var key in data) { 
    formData.append(key, data[key]); 
} 
+0

хороший ответ, но не будут ли данные ['file []'] = file лучше? – Marcel

+0

Спецификация на самом деле там (по той же ссылке), но не реализована кем-либо. Может быть, стоит проверить в будущем, чтобы видеть. –

+0

@Marcel Это было бы необходимо только в том случае, если сервер, на который вы отправляете, требует его, в вашем случае, PHP. –

2

Я знаю, эта нить старый, но я только что нашел это: https://developer.mozilla.org/en-US/docs/Web/API/FormData/delete

я сюр это может помочь. Вы можете использовать formData.delete(name), чтобы удалить запись formData с ключом «name».

+0

Это не работает на 2 мобильных браузерах, которые я тестировал на iOS 10 и Android 5.1. –

+0

. Проверьте совместимость браузера здесь: https://developer.mozilla.org/de/docs/Web/API/FormData/delete#Browser_compatibility – wittich

Смежные вопросы