這是我的代碼。它適用於Firefox和Chrome,但不適用於Safari。我沒有得到任何錯誤。formData get()在Safari中似乎不起作用
<script>
var cleanData = new FormData();
cleanData.append("test", "test");
alert(cleanData.get("test"));
</script>
有沒有人知道解決方法?
這是我的代碼。它適用於Firefox和Chrome,但不適用於Safari。我沒有得到任何錯誤。formData get()在Safari中似乎不起作用
<script>
var cleanData = new FormData();
cleanData.append("test", "test");
alert(cleanData.get("test"));
</script>
有沒有人知道解決方法?
顯然,Safari目前沒有辦法將值存儲在FormData對象中。目前沒有解決方法,顯然它不適用於polyfill。
對不起:(
注: https://developer.mozilla.org/en-US/docs/Web/API/FormData/get#Browser_compatibility https://www.bountysource.com/issues/27573236-is-it-possible-to-polyfill-missing-formdata-methods
我解決了這個通過有條件地(如果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);