IE 8/9

2012-06-01 24 views
29

FormData içinde FormData için geri dönüş, IE 8/9'da yok, ancak bu tarayıcılarda bu işlevselliğe ihtiyacım var. Bunun için güzel bir geri dönüş var mı?IE 8/9

Json verilerini göndermeyi denerdim, ancak bir dosyayı sunucuya aktarmam gerekiyor. Bu dosyayı modern tarayıcılarda formData'a ekliyorum ve sadece bir XHR isteği gönderin. IE 8/9'da FormData bulunmadığından, bu açıkça başarısız oluyor.

// I cant seem to get this to work with a file. 
$.ajax({ 
    url: '/genericHandlers/UploadDocsFile.ashx', 
    type: "POST", 
    data: model.toJSON(), 
    contentType: 'application/json' 
    }).done(function (data) { 
     log('stuff happened!'); 
    }); 

Belki de alternatif bir js biçiminde sahte form nesnesi oluşturmak ve daha sonra verileri buna eklemek mi?

+5

pencere için bir polyfill isterim:

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

MDN'yi Eğer yedeği için değiştirebilir hangi bir this function sahiptir .FormData yöntemi. –

+0

Daha sonra size yeni bir FormData [polyfill] (https://github.com/jimmywarting/FormData/) sunacağım. Maalesef ne yazık ki blob oluşturmaya da bağlıyım ... Belki bunu da kullanabilirsiniz: [Blob.js] (https: //github.com/eligrey/Blob.js). Bir dosyayı okumak için flaşa ihtiyacınız olacak – Endless

cevap

8

Sadece bir çözüm biliyorum, ancak IE'ler için gerçekten 1-1 yedeği değil. Dosya göndermek için olası bir iletişim API'si yoktur, çünkü eski tarayıcılarda, FormData kullanan modern ortamlarda olduğu gibi giriş alanlarını bağlayamazsınız. Ancak iframe kullanarak tüm formu gönderebilirsiniz. Bu durumda XHR DataForm ve iframe'i destekleyen jquery.form eklentisini kullanabilirsiniz (tarayıcı, FormData API desteği olmadığında iframe ile veri gönderir).

4

XMLHttpRequests kullanarak dosyayı el ile gönderebilirsiniz, bu here üzerinde çok fazla bilgi var.

tarayıcı ile ilk FormData nesneyi kullanabilirsiniz eğer test edebilir:

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 Really? Https://en.wikipedia.org/wiki/XMLHttpRequest#History_and_support uyarınca Microsoft, Ekim 2006'da yayımlanan Internet Explorer 7.0'daki betik dillerine XMLHttpRequest nesne tanımlayıcısını ekledi. –

+1

Bu kavram, gerçekten ActiveXObjects ile IE 5 & 6'ya uygulanabilir. de istedim –