我有一个Facebook应用程序可以将照片上传到Facebook。上传时,我会跟踪Facebook给该照片的ID以供应用程序使用。以下是我使用的代码,它在FireFox和Chrome中运行良好。
$('#uploadForm').submit(function(e) {
e.preventDefault(); // to prevent the default submit
$('#message').val(photoMessage);
var formData = new FormData($('#uploadForm')[0]);
// this is where the problem is. IE does not understand FormData - SCRIPT5009: 'FormData' is undefined
$.ajax({
type : 'POST',
url : $('#uploadForm').attr('action'), // graph api url -
xhr : function() { // custom xhr
myXhr = $.ajaxSettings.xhr();
return myXhr;
},
cache : false,
contentType : false,
processData : false,
data : formData,
success : function(msg) {
alert (msg.id);
在FF和Chrome中,我得到了msg.id.这是Facebook为上传的照片设置的ID,我需要这个。在IE 9中,我收到错误,
SCRIPT5009:' FormData'未定义
据我所知,FormData仅受IE10支持。我试过IE()
的解决方法$('#uploadForm').submit(function(e) {
e.preventDefault();
$('#message').val(photoMessage);
var options = { // as FormData is not supported, we create out own js object
url : $('#uploadForm').attr('action'),
type : 'POST',
contentType : false,
processData : false,
success:function( data ) { // not reaching
alert (data.id);
},
};
$('#uploadForm').ajaxSubmit(options); // submit data
return false;
照片已成功上传至Facebook。但问题是,而不是提供数据"在我的成功函数中,IE要求将json保存为文件。用户单击“保存”时,会将文件下载到客户端计算机。
如果服务器端在开发人员控件中,他可以通过将" response_content_type设置为text / plain"来解决此问题。但由于回应来自Facebook,我们无法控制它。
有没有办法我们可以从Facebook(tab / iframe)应用程序上传照片Facebook并获得回复以阅读Facebook提供的ID。
更新
我是从here
找到的支持XMLHttpRequest Level 2的浏览器将能够无缝上传文件,甚至可以在上传过程中获得进度更新。对于较旧的浏览器,使用了涉及iframe的回退技术,因为无法使用XMLHttpRequest对象的1级实现上传文件。这是一种常见的后备技术,但它具有固有的局限性。 iframe元素用作表单提交操作的目标,这意味着服务器响应被写入iframe。 如果响应类型是HTML或XML,这很好,但如果响应类型是脚本或JSON ,它们也不起作用,这两者通常都包含需要使用实体重复的字符在HTML标记中找到引用。
为了解释使用iframe模式时脚本和JSON响应的挑战,Form Plugin允许将这些响应嵌入到textarea元素中,建议您在与文件结合使用时对这些响应类型执行此操作上传和旧浏览器。
请务必注意,即使将dataType选项设置为' script',并且服务器实际上正在使用某些javascript响应多部分表单提交,响应的 Content-Type标题应强制为text / html,否则Internet Explorer将提示用户下载"文件" 。
糟糕。好像我被卡住了。因为Facebook会以json格式返回响应,而我无法控制它。