Вопрос

У меня есть простая форма для отправки изображения, подобного так:

<%= form_tag avatar_item_path(@tutorial, :format => :js), :method => :post, :remote => true do %>
  <%= file_field_tag :item_avatar, :name => "item_image[image]" %>
<% end %>

(Dragonfly обрабатывает изображение, если это как -то актуально)

Мое действие контроллера называется update_avatar, и у него нет логики рендеринга или render_to (оно просто вызывает методы поиска и сохранения), поэтому по умолчанию на js uppred update_avatar.js.erb отображается.

update_avatar.js.erb содержит функцию JS и $(function () { // some code here })

В FF, Chrome и Safari это работает нормально.

Проблема: IE9 хочет сохранить ответ как avatar.js

Используя инструменты разработчика, я вижу, что запрос отправляется и получен правильно, а тип контента ответа-"Text/JavaScript; charset = utf-8"

Я пробовал вручную настройку типа контента в приложение/JavaScript, и это не имело никакого эффекта.

Как предложили другие в другом месте, если я установите тип контента на текст/HTML IE9, не подскажут мне его сохранить, но в этом случае ни один из браузеров фактически не оценит JS в ответе (я помещаю JS в теги скрипта) Анкет

Из поиска кажется, что около года назад другие сталкивались с той же проблемой, и их решением было обновление jQuery, так как прошлый год у меня была гораздо более новая версия. Возможно, это регрессия?

Я использую последний драгоценный камень jquery-rails, 1.0.19, который включает в себя jQuery 1.7.1, а также включает в себя последнюю версию https://github.com/rails/jquery-ujs (Я сделал различие, чтобы убедиться).

Это было полезно?

Решение

Использование загрузки файла jQuery

https://github.com/blueimp/jquery-file-upload (Базовая версия, а не версия пользовательского интерфейса)

Убедитесь, что URL -адрес явно указан в формате JS, и установите опцию DataType на «Script»:

$('#item_avatar').fileupload({
  url: "<%= avatar_item_path(item, :format => :js) %>",
  dataType: 'script'
});

В вашем контроллере установите тип типа содержимого ответа на текст/Plain:

respond_to do |format|
  format.js { render :content_type => "text/plain" } # needed for IE
end

Ответ JS теперь должен правильно оцениваться во всех браузерах!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top