2011-11-27 1 views
5

イム:JSのXMLHttpRequestオブジェクトによるフォームデータのポスト? JSでフォームデータをポストしようとしている(クロスブラウザ)

私はこのコードを持っている:

var formData = new FormData(); 
    formData.append("username", "Groucho"); 
    formData.append("accountnum", 123456); 
    formData.append("afile", "2"); 

var xhr = new XMLHttpRequest(); 
xhr.open("POST", "http://xxxxx/xx.ashx",true); 
xhr.send(formData); 

FORMDATA MDNに従っては、IEで利用可能(または未知の)ではありません。

私はFFでこれを試してみてください。

enter image description here(私はその罰金を考えて...)。

私はIEにしてみてください:

enter image description here

フォームデータをポストするためのソリューションである(あるいは私のデータが、客観的な方法で)何 CROSSBROWSER?

答えて

3

使用しているIEのバージョンがわかりません。 formDataオブジェクトはIE9以下ではサポートされていません。 XMLHTTPRequest2(formDataオブジェクトを含む)はIE10(http://caniuse.com/xhr2

でサポートされているはずです。クロスブラウザのAJAXファイルのアップロードは現在非常に難しいです。 あなた自身のフォームヘッダー/境界をJavascriptで構築しようとしましたが(回答はこちらを参照してください:XMLHttpRequest POST multipart/form-data)、個人的には、努力する価値はないと私は思います。

7

IEでFormDataを送信するのに使うことができる単純なラッパーを書いています(webkit/geckoの中のものも混乱させません)。

var ieFormData = function ieFormData(){ 
if(window.FormData == undefined) 
{ 
    this.processData = true; 
    this.contentType = 'application/x-www-form-urlencoded'; 
    this.append = function(name, value) { 
     this[name] = value == undefined ? "" : value; 
     return true; 
    } 
} 
else 
{ 
    var formdata = new FormData(); 
    formdata.processData = false; 
    formdata.contentType = false; 
    return formdata; 
} 

}

は今、単純にすべての新しいいるFormDataを()新しいieFormData()への呼び出しを切り替え、

processData: false, 
contentType: false, 

を切り替える:あなたがいるFormDataを使用しようとする前に、単純に次のJSが含ま

processData: formdata.processData, 
contentType: formdata.contentType, 
cache: false, 

あなたはすべて設定されています。もちろん、これでファイルを含めることはできません(あなたはまだiframeハックが必要です)が、IEでFormDataを模倣できるようになります。

+0

私は同様の問題がありますが、これを修正する方法がわかりません。varであれば、私のコードは何から変わるのですか?postedFile = document.getElementById( "file")。files [0]; \t \t var formElement = document.getElementById( "formID"); \t \t var form =新しいFormData(formElement); \t \t form.append( 'postedFile'、postedFile); \t \t request.open( "POST"、 "/ Admin/SaveQuestion /"、true); \t \t request.send(form); – Jay

+0

私はあまりにも投稿されたファイルについて心配していない、私はちょうどフォームデータの残りの部分を提出できるようにしたい – Jay

関連する問題