在IE中迭代FormData [英] Iterating through FormData in IE

查看:185
本文介绍了在IE中迭代FormData的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用FormData将信息发送回服务器。但在某些情况下,我需要在发送之前读出数据。

I'm using FormData to send information back to the server. In some cases however I need to read out the data before I send it.

Chrome允许您遍历集合,但IE不提供相同的方法。

Chrome allows you to iterate through the collection but IE does not supply the same methods.

以下代码适用于Chrome:

The code below works in 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]); 
}

JS小提琴

有谁知道如何在IE中实现相同的结果?谢谢。

Does anyone know how to achieve the same result in IE? Thanks.

推荐答案

有一个 FormData polyfill 有效。有关详细信息,请参阅他们的文档

There's a FormData polyfill that works. For details, read their docs.

要使其适用于IE 10及更高版本,您只需要添加 WeakMap polyfill

To make it work with IE 10 and above, you'll just have to add a WeakMap polyfill as well.

针对IE10及更高版本的JSBin演示。

<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


如果您只需要IE 11及更高版本,则可以删除 WeakMap 的polyfill并保持 FormData 的。

If you only need IE 11 and above, you can remove the WeakMap's polyfill and just keep FormData's.

这里的JSBin演示

<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

这篇关于在IE中迭代FormData的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆