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中创建一个假的表单对象然后将数据附加到那个?
答案 0 :(得分:8)
我只知道一种可能的解决方案,但对于IE来说,它并不是真正的1-1倒退。没有可能的通信API用于发送文件,因为您无法在旧浏览器中绑定输入字段,例如使用FormData的现代浏览器。但您可以使用iframe发送整个表单。对于这种情况,您可以使用支持XHR DataForm和iframe的jquery.form插件(当浏览器不支持FormData API时,数据与iframe一起发送)。
答案 1 :(得分: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, '+');
答案 2 :(得分:0)
此答案未严格解决您提出的问题,因此,我了解Mods是否会删除它。
但是,您的问题与我正在研究的一个问题密切相关,该问题是如何通过FormData()提供拖放式上传,并且老版本的浏览器会顺畅降级?
有一个很棒的图书馆,名为dropzone.js,可以为我的问题提供完美的解决方案。最好的部分也许是该库提供了开箱即用的优雅降级功能,以支持在旧版浏览器as detailed here上的文件上传。
释义来源:
幸运的是,如果不支持浏览器,dropzone.js库将显示一个可自定义的后备类,其中包含一个输入字段和一个提交按钮。
我希望这些信息对像我这样的人有所帮助,以寻求一种易于实现且优雅的文件上传解决方案。