2016-08-11 11 views
7

यह मेरा कोड है। यह फ़ायरफ़ॉक्स और क्रोम में काम करता है लेकिन सफारी नहीं। मुझे कोई त्रुटि नहीं है।फॉर्मडाटा मिलता है() सफारी में काम नहीं करता है

<script> 
var cleanData = new FormData(); 
cleanData.append("test", "test"); 
alert(cleanData.get("test")); 
</script> 

क्या कोई कामकाज जानता है?

उत्तर

6

जाहिर है, सफारी के पास इस समय फॉर्मडाटा ऑब्जेक्ट्स में संग्रहीत मान प्राप्त करने का कोई साधन नहीं है। इस समय कोई कामकाज नहीं है, और स्पष्ट रूप से यह पॉलीफिल के लिए व्यावहारिक नहीं है।

क्षमा करें :(

नोट्स: 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

1

मैं सशर्त द्वारा इस हल (यदि सफ़ारी ब्राउज़र है) एक वास्तविक रूप की संपत्ति तत्वों के माध्यम से पुनरावृत्ति अन्य सभी के लिए। ब्राउज़र, मेरा रैपर बस फॉर्मडाटा प्रविष्टियों() के माध्यम से पुनरावृत्त करता है। मेरे फ़ंक्शन का अंतिम परिणाम, किसी भी मामले में, एक साधारण जावास्क्रिप्ट ऑब्जेक्ट (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)); 
} 

उदाहरण उपयोग यह मानकर कि आप एक वास्तविक CleanDataForm बुलाया फ़ॉर्म दिया गया है कि बजाय बनाने स्क्रैच से एक फॉर्मडाटा:

var cleanData=FormDataNameValuePairs('CleanDataForm'); 
alert(cleanData.test); 
संबंधित मुद्दे