我正在使用FormData
对象,而我的代码在Chrome上运行良好,Microsoft Edge会发出以下错误消息Object doesn't support property or method 'entries'
- 对应于以下代码:
for(let pair of formData.entries()) {
...
}
我已尝试用.entries()
替换.getAll()
,但Microsoft Edge无法识别这两种方法。
有没有办法从Microsoft Edge中获取此功能(迭代FormData
个文件)?
FormData Microsoft Edge控制台转储
答案 0 :(得分:13)
从本质上讲,填充是一种可以手动定义特定平台/浏览器本身不支持的功能的方法。
在您的情况下,此处给出了函数Object.entries
的基本定义:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries#Polyfill
他们提供了这个简单,易于部署的定义:
if (!Object.entries)
Object.entries = function( obj ){
var ownProps = Object.keys( obj ),
i = ownProps.length,
resArray = new Array(i); // preallocate the Array
while (i--)
resArray[i] = [ownProps[i], obj[ownProps[i]]];
return resArray;
};
查看上面的代码,它检查的第一件事是Object.entries
是否存在。如果确实如此,不用担心,但如果它不存在,那就创造它......
只要在你在代码中实际调用它之前定义了这个函数,你应该没问题。
使用类似angular-cli的内容,它们提供了一个polyfills.ts文件(在运行应用程序之前执行),您可以在其中放置此类代码或导入包含您需要的定义的文件。
10/30/2018更新:
@apsillers正确地指出上面的答案不适用于FormData.entries()
,而是适用于Object.entries()
。
FormData.entries()
的解决方案(这对我有用):
https://stackoverflow.com/a/49556416/3806701
基本上,导入此poly-fill:
<script src="https://unpkg.com/formdata-polyfill"></script>
然后您可以按如下方式迭代FormData
:
var formDataEntries = (<any>formData).entries(), formDataEntry = formDataEntries.next(), pair;
while (!formDataEntry.done) {
pair = formDataEntry.value;
console.log(pair[0] + ', ' + pair[1]);
formDataEntry = formDataEntries.next();
}
答案 1 :(得分:13)
答案 2 :(得分:1)
通过导入
import 'core-js/es7/object';
如果遇到错误
未找到模块:错误:无法解析'core-js / es7 / object'
然后将导入中的所有“ es6”和“ es7”更改为“ es”。
import 'core-js/es/object';
答案 3 :(得分:0)
我在polyfills.ts中添加了以下代码,它对我有用。
import 'core-js/es7/object';
import 'core-js/es7/array';
if (!Object.entries)
{ Object.entries = function(obj)
{
var ownProps = Object.keys(obj),
i = ownProps.length,
resArray = new Array(i); // preallocate the Array while (i--)
resArray[i] = [ownProps[i], obj[ownProps[i]]];
return resArray;
};
}