gog*_*n13 9 javascript iframe jquery
我正在调试我们的文件上传脚本,它在不支持通过XMLHttpRequest对象发送文件数据的浏览器中使用隐藏的iframe.
关于在IE中提交iframe的文章和问题过多; (比如这篇文章和这篇文章),但他们都引用了IE不能为你正确设置'name'属性这一事实.
下面的代码生成一个表单,其目标设置为iFrame的名称,但在提交表单时,IE9仍然提示我"你想打开还是保存photo_upload.json?",而不是将其加载到iFrame中.
var $iframe = $("<iframe id='" + id + "' name='" + id + "' />");
$('body').append($iframe);
$iframe.load(function () {
console.log("loaded"); // this never happens in IE9
});
// pretend this form also has a file input object that gets populated
var $form = $('<form />').attr({
method: "post",
enctype: "multipart/form-data",
action: "/photo_upload.json",
target: id
});
$('body').append($form);
$form.submit();
Run Code Online (Sandbox Code Playgroud)
此代码适用于FF和Chrome,但在IE9中,系统会提示您打开或保存" photo_upload.json ".如果我打开文件,IE9获得的响应是准确的.
有没有人有任何见解?是否有任何我缺少的iframe提交要通过?我是否需要设置某种标题来告诉IE不要这样打开它?谢谢!
感谢@Kolink为我解决了这个问题的代码.
Rails服务器端代码,在photo_upload函数中:
if params[:from_iframe]
render :json => @temp_photo, :content_type => "text/html"
else
render :json => @temp_photo
end
Run Code Online (Sandbox Code Playgroud)
我从iframe提交表单时传递了一个额外的参数,因此无论照片上传是AJAX请求还是隐藏的iFrame,我都可以使用相同的服务器端功能.
在后一种情况下,正如@Kolink建议的那样,这将从iFrame中获取JSON:
$iframe.load(function () {
json_string = iframe[0].contentDocument.body.innerHTML;
});
Run Code Online (Sandbox Code Playgroud)
Nie*_*sol 10
photo_upload.json 正在下载到iframe,但由于浏览器不知道如何处理它,因此它假定它是一个可供下载的文件.
理想情况下,您应该让iframe接收HTML数据,其中可能包含一个<script>告诉父窗口要做什么的数据.或者,如果您已经在父级中有代码来处理接收响应(它看起来像您这样做),请设置Content-Type: text/html响应以强制浏览器将其视为HTML文档 - 它将自动添加基础知识,如<html>标记和一个<body>标签,所以才访问iframe.contentDocument.body.innerHTML.
| 归档时间: |
|
| 查看次数: |
3409 次 |
| 最近记录: |