2012-06-01 17 views
29

FormDataはIE 8/9には存在しませんが、そのブラウザではその機能が必要です。これには良い転倒はありますか?IE 8/9のFormDataのフォールバック

jsonデータを送信しようとしますが、ファイルをサーバーに渡す必要があります。最近のブラウザではこのファイルをformDataに追加し、XHRリクエストを送信します。 FormDataはIE 8/9には存在しないため、これは明らかに失敗します。

代わりに、jsに偽のフォームオブジェクトを作成し、それにデータを追加することはできますか?

+5

ウィンドウのポリフィルを大好きです.FormDataメソッド。 –

+0

次に、私はあなたに新しいFormData [polyfill](https://github.com/jimmywarting/FormData/)を提示します。残念ながらBLOBの作成に依存しています...おそらくあなたもこれを使うことができます:[Blob.js](https: //github.com/eligrey/Blob.js)。あなたがフラッシュを必要とするファイルを読むには – Endless

答えて

8

私は1つの解決策しか知りませんが、実際にはIEのフォールバックではありません。 FormDataを使用する現代のもののように、古いブラウザの入力フィールドをバインドできないため、ファイルを送信するための通信APIはありません。しかし、フォーム全体をiframeを使って送ることができます。この場合、XHR DataFormとiframeをサポートするjquery.formプラグインを使用できます(ブラウザがFormData APIをサポートしていない場合、データはiframeとともに送信されます)。

4

XMLHttpRequestsを使用してファイルを手動で送信することができます。hereに関する多くの情報があります。

ブラウザが有する第1 FormDataオブジェクトを使用することができます場合は、テストすることができ:MDNは、あなたが、フォールバックのために修正することができthis functionを持って

if(typeof FormData !== 'undefined') 
    ... 

var XHR = new XMLHttpRequest(); 
var urlEncodedData = ""; 
var urlEncodedDataPairs = []; 
var name; 

// We turn the data object into an array of URL encoded key value pairs. 
for(name in data) { 
    urlEncodedDataPairs.push(encodeURIComponent(name) + '=' + encodeURIComponent(data[name])); 
} 

// We combine the pairs into a single string and replace all encoded spaces to 
// the plus character to match the behaviour of the web browser form submit. 
urlEncodedData = urlEncodedDataPairs.join('&').replace(/%20/g, '+'); 
+3

@Karson本当に? https://en.wikipedia.org/wiki/XMLHttpRequest#History_and_support Microsoftは、2006年10月にリリースされたInternet Explorer 7.0のスクリプト言語にXMLHttpRequestオブジェクト識別子を追加しました。 –

+1

IE 5および6のコンセプトはActiveXObjectで適用できます欲しかった –

関連する問題