Итерация через FormData в IE
Я использую FormData для отправки информации обратно на сервер. В некоторых случаях, однако, мне нужно прочитать данные, прежде чем отправлять их.
Chrome позволяет перебирать коллекцию, но IE не предоставляет те же методы.
ниже код работает в Chrome:
// Create a test FormData object
var formData = new FormData();
formData.append('key1', 'value1');
formData.append('key2', 'value2');
// Display the key/value pairs
for(var pair of formData.entries()) {
console.log(pair[0]+ ', '+ pair[1]);
}
кто-нибудь знает, как достичь того же результата в IE? Спасибо.
2 ответов
здесь FormData
polyfill это работает. Подробнее читайте их документы.
т. е. 10, т. е. 11 и Edge
чтобы он работал с IE 10 и выше, вам просто нужно добавить WeakMap
polyfill как хорошо.
<script src="https://unpkg.com/weakmap-polyfill/weakmap-polyfill.min.js"></script>
<script src="https://unpkg.com/formdata-polyfill"></script>
<form action="" id="f">
<input type="text" name="i1" value="v1">
<input type="text" name="i2" value="v2">
</form>
<script type="text/javascript">
console.clear();
// Create a test FormData object
var formData = new FormData();
formData.append('key1', 'value1');
formData.append('key2', 'value2');
// Display the key/value pairs
var formDataEntries = formData.entries(), formDataEntry = formDataEntries.next(), pair;
while (!formDataEntry.done) {
pair = formDataEntry.value;
console.log(pair[0] + ', ' + pair[1]);
formDataEntry = formDataEntries.next();
}
// or, if you are really into compact code
var es, e, pair;
for (es = formData.entries(); !(e = es.next()).done && (pair = e.value);) {
console.log(pair[0] + ', ' + pair[1]);
}
// testing getting from form
var myForm = document.getElementById('f');
for (es = new FormData(myForm).entries(); !(e = es.next()).done && (pair = e.value);) {
console.log(pair[0] + ', ' + pair[1]);
}
</script>
код выше подбирает последние версии. Проверенные версии:https://unpkg.com/weakmap-polyfill@2.0.0/weakmap-polyfill.min.js
и https://unpkg.com/formdata-polyfill@3.0.9/formdata.min.js
IE11 и Edge:
Если вам нужен только IE 11 и выше, вы можете снять WeakMap
's polyfill и просто держать FormData
' s.
<script src="https://unpkg.com/formdata-polyfill"></script>
<form action="" id="f">
<input type="text" name="i1" value="v1">
<input type="text" name="i2" value="v2">
</form>
<script type="text/javascript">
console.clear();
// Create a test FormData object
var formData = new FormData();
formData.append('key1', 'value1');
formData.append('key2', 'value2');
// Display the key/value pairs
var formDataEntries = formData.entries(), formDataEntry = formDataEntries.next(), pair;
while (!formDataEntry.done) {
pair = formDataEntry.value;
console.log(pair[0] + ', ' + pair[1]);
formDataEntry = formDataEntries.next();
}
// or, if you are really into compact code
var es, e, pair;
for (es = formData.entries(); !(e = es.next()).done && (pair = e.value);) {
console.log(pair[0] + ', ' + pair[1]);
}
// testing getting from form element
const myForm = document.getElementById('f');
for (es = new FormData(myForm).entries(); !(e = es.next()).done && (pair = e.value);) {
console.log(pair[0] + ', ' + pair[1]);
}
</script>
код выше подбирает последнюю версию. Проверенная версия:https://unpkg.com/formdata-polyfill@3.0.9/formdata.min.js
var unindexed_array = form.serializeArray();
$.map(unindexed_array, function(n, i){
console.log(n['name']+ ', '+ n['value']);
});
этот код дает тот же результат в IE