Я отлаживаю наш скрипт выгрузки файлов, который использует скрытый iframe в браузерах, которые не поддерживают отправку данных файлов через объект XMLHttpRequest.
Существует множество статей и вопросов по отправке iframe в IE; (например, этот пост и этот пост ), но все они ссылаются на тот факт, что 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();
Этот код работает в 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
Я передаю дополнительный параметр при отправке формы из iframe, поэтому я могу использовать одну и ту же функцию на стороне сервера, независимо от того, является ли загрузка фотографий запросом AJAX или скрытым iFrame.
В последнем случае, как рекомендует @Kolink, это позволит получить JSON из iFrame:
$iframe.load(function () {
json_string = iframe[0].contentDocument.body.innerHTML;
});