2011-11-27 9 views
5

Im js bir form verilerini göndermek için çalışıyorum:JS'deki XMLHttpRequest nesnesi üzerinden formdata gönderilsin mi? (Çapraz tarayıcı)

Bu kodu vardır:

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 göre IE'de bulunan (veya bilinmeyen) değildir.

enter image description here (i ... ince düşünmek):

Ben FF bu çalıştığınızda.

Ben IE deneyin:

enter image description here

crossbrowser (objektif yolu veya benim veri ama) form verilerini göndermek için çözüm nedir olduğunu

?

cevap

3

Kullandığınız IE'nin hangi sürümünü kullanmadınız. FormData nesnesi IE9 veya daha düşük desteklenmez. XMLHTTPRequest2 (formData nesnesini içerir) IE10 (http://caniuse.com/xhr2)

Desteklenmelidir Arabirimi destekleyen AJAX dosya yükleme şu anda çok zor. , kendi form üstbilgisini/sınırlarını Javascript'te oluşturmayı deneyebilirsiniz (bkz. Burada yanıt: XMLHttpRequest POST multipart/form-data), ama kişisel olarak, bu çabaya değeceğine inanmıyorum.

7

IE'de FormData göndermek için kullanabileceğiniz basit bir sarıcı yazdım (ve webkit/gecko'daki hiçbir şeyi bozmayacak).

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; 
} 

}

Şimdi sadece tüm yeni FormData() yeni ieFormData() çağrıları geçin ve

için

processData: false, 
contentType: false, 

geçiş: Eğer FormData kullanmayı denemeden önce Basitçe aşağıdaki js içerir

ve her şey hazır demektir. Tabii ki, bu size dosya eklemenize izin vermez (iframe hack'ına hala ihtiyacınız var), ancak IE'de FormData'yu taklit etmenize izin verecektir.

+0

Benzer bir sorunum var ama nasıl düzeltileceğinden emin değilim, eğer kodum post edildiyse benim kodumdan ne olurdu postedFile = document.getElementById ("file"). Files [0]; \t \t var formElement = document.getElementById ("formID"); \t \t var form = new FormData (formElement); \t \t form.append ('postedFile', postedFile); \t \t request.open ("POST", "/ Admin/SaveQuestion /", true); \t \t request.send (form); – Jay

+0

Gönderilen dosya hakkında çok endişelenmiyorum, sadece form verilerinin geri kalanını gönderebilmek istiyorum – Jay