这是我的代码。它适用于Firefox和Chrome,但不适用于Safari。我没有错。
<script>
var cleanData = new FormData();
cleanData.append("test", "test");
alert(cleanData.get("test"));
</script>
有没有人知道解决方法?
答案 0 :(得分:1)
我通过有条件解决了这个问题(如果Safari是浏览器),迭代实际表单的元素属性。对于所有其他浏览器,我的包装器只是遍历 FormData条目()。在任何一种情况下,我的函数的最终结果是一个简单的javascript对象(JSON),它相当于名称/值对。
function FormDataNameValuePairs(FormName)
{
var FormDaytaObject={};
var FormElement=$('#'+FormName).get(0);
if (IsSafariBrowser())
{
var FormElementCollection=FormElement.elements;
//console.log('namedItem='+FormElementCollection.namedItem('KEY'));
var JQEle,EleType;
for (ele=0; (ele < FormElementCollection.length); ele++)
{
JQEle=$(FormElementCollection.item(ele));
EleType=JQEle.attr('type');
// https://github.com/jimmywarting/FormData/blob/master/FormData.js
if ((! JQEle.attr('name')) ||
(((EleType == 'checkbox') || (EleType == 'radio')) &&
(! JQEle.prop('checked'))))
continue;
FormDaytaObject[JQEle.attr('name')]=JQEle.val();
}
}
else
{
var FormDayta=new FormData(FormElement);
for (var fld of FormDayta.entries())
FormDaytaObject[fld[0]]=fld[1];
}
return FormDaytaObject;
}
其中IsSafariBrowser()是通过你最喜欢的方法实现的,但我选择了这个:
function IsSafariBrowser()
{
var VendorName=window.navigator.vendor;
return ((VendorName.indexOf('Apple') > -1) &&
(window.navigator.userAgent.indexOf('Safari') > -1));
}
在OP的情况下使用示例,假设您有一个名为CleanDataForm的实际表单,而不是从头开始创建FormData:
var cleanData=FormDataNameValuePairs('CleanDataForm');
alert(cleanData.test);