У меня есть приложение RoR, работающее с рельсами 2.3.8, которое использует UJS стиля Rails 3 для привязки удаленных форм данных вместо использования form_for_remote, контроллер отвечает js.erb файл с сервера.Rails UJS-рендеринг js.erb шаблон в IE
Прекрасно работает в FF, Chrome и Safari, но при запуске в IE он предлагает вам сохранить файл и не выполнить JS. Мои исследования до сих пор не привели к возможным причинам, поэтому любая помощь будет принята с благодарностью!
Вот мой контроллер действия:
def create
@note = Note.create(params[:note].merge(:author_id => current_user.id))
respond_to do |format|
format.js {}
end
end
Я также попытался это вместо блока respond_to, который имеет тот же результат:
render :template => "notes/create.js.erb", :content_type => 'text/javascript'
И мой create.js.erb:
$('#notes').append('<%= escape_javascript(render(:partial => "notes/note", :locals => {:note => @note}))%>');
$('.new_note textarea').val('');
Это все довольно прямолинейно, я действительно не понимаю, что происходит с IE.
Спасибо за помощь!
Edit:
Форма, которая отправляет примечание:
<% form_for @note, :url => notes_path, :html => { 'data-remote' => true, :class =>
'new_note'} do |f|%>
<%= f.hidden_field :parent_id %>
<%= hidden_field_tag :note_type, note_type%>
<%= f.text_area :body, :size => size%>
<br/>
<%= f.submit "Add Note"%>
<% end %>
И relelvent часть rails.js:
$('form[data-remote]').live('submit', function (e) {
$(this).callRemote();
e.preventDefault();
});
/**
* Handles execution of remote calls firing overridable events along the way
*/
callRemote: function() {
var el = this,
method = el.attr('method') || el.attr('data-method') || 'GET',
url = el.attr('action') || el.attr('href'),
dataType = el.attr('data-type') || 'script';
if (url === undefined) {
throw "No URL specified for remote call (action or href must be present).";
} else {
if (el.triggerAndReturn('ajax:before')) {
var data = el.is('form') ? el.serializeArray() : [];
$.ajax({
url: url,
data: data,
dataType: dataType,
type: method.toUpperCase(),
beforeSend: function (xhr) {
el.trigger('ajax:loading', xhr);
},
success: function (data, status, xhr) {
el.trigger('ajax:success', [data, status, xhr]);
},
complete: function (xhr) {
el.trigger('ajax:complete', xhr);
},
error: function (xhr, status, error) {
el.trigger('ajax:failure', [xhr, status, error]);
}
});
}
el.trigger('ajax:after');
}
}
Сервер отвечает: Content-Type: текст/Javascript; charset = utf-8
Я попытался явно установить тип данных для помощника rails.js, но это ничего не изменило.
В какой версии IE он не работает? Я проверяю его с помощью IE8, и он работает для меня (rails 2.3.8, jquery UJS, шаблон HAML и у меня нет '{}' после 'format.js' в блоке' response_to'.) – Voldy
Это происходит для меня в IE8 как в режиме совместимости, так и вне его, я также попытался потерять {} на моем формате.js, но я получаю тот же результат, он предлагает сохранить файл. – Chelsea
Не могли бы вы показать ссылку на 'create'? Какие javascripts находятся в 'head'? – Voldy