使用javascript迭代Internet Explorer中的formData对象

时间:2017-08-01 02:26:40

标签: javascript json internet-explorer form-data

使用表单id创建formData对象并执行以下操作:

var formDataDetails = new FormData(document.getElementById("form_id"));
for (var entry of formDataDetails{
     res[entry[0]] = entry[1];
}

后来做JSON stringify并进行POST。

但我最近发现'Internet Explorer'不支持for..of循环。我相信使用for..in循环是不正确的,因为它用于迭代可枚举对象(循环通过对象的属性)。

我应该如何为Internet Explorer迭代formData?

1 个答案:

答案 0 :(得分:0)

我发现,截至本文,IE仍未通过FormData对象在for..of循环中可靠地工作。所以,我的解决方案,当你需要迭代集合时,只需要避免使用FormData。如果您只是使用它来发布表单数据,FormData在IE中运行良好。

如果您需要在发送之前迭代表单的值,您可以像我一样 - 直接使用form.elements集合。

这样的事情:

export function form2Obj(f) {
   var elemArray = f.elements;
   var formObj = {};
   for (var k in elemArray) {
      var input = elemArray[k];
      if (!input || !input.name || !input.value) continue;
      formObj[input.name] = input.value;  
      // etc, need special handling for inputs of type radio 
      // checkbox, textarea, and select most likely
   }
   return formObj;

}

为了记录,我使用webpack编译为ES6。当我在开发模式下编译时,IE可以处理for..of循环。当我在生产模式下编译时,IE 工作。