2012-06-01 38 views
29

FormData在IE 8/9中不存在,但我需要那些瀏覽器中的功能。這是否有一個很好的回退?IE 8/9中的FormData回退

我會嘗試發送json數據,但我需要將一個文件傳遞給服務器。我在現代瀏覽器中將此文件追加到formData,並提交XHR請求。因爲在IE 8/9中不存在FormData,這顯然失敗。

// 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!'); 
    }); 

也許另一種方法是在js中創建一個假表單對象,然後將數據附加到該表單中?

+5

會愛一個填充工具的窗口.FormData方法。 –

+0

然後我向你展示一個新的FormData [polyfill](https://github.com/jimmywarting/FormData/)仍然依賴於構造blobs不幸...也許你也可以使用它:[Blob.js](https: //github.com/eligrey/Blob.js)。要讀取文件,您需要flash – Endless

回答

8

我知道只有一個可能的解決方案,但它不是真正的1-1後備的IE瀏覽器。沒有可能的通信API用於發送文件,因爲您不能在舊瀏覽器中綁定輸入字段,就像使用FormData的現代字符串一樣。但是您可以使用iframe發送整個表單。對於這種情況,您可以使用支持XHR DataForm和iframe(當瀏覽器不支持FormData API時與iframe一起發送數據)的jquery.form插件。

4

您可以使用XMLHttpRequests手動發送文件,這個here上有很多信息。

您可以測試瀏覽器是否可以先用FormData對象:

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

MDN有this function,你可以修改回退:

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

如果您真的可以將該概念應用於帶有ActiveXObjects的IE 5和6也想要 –