我有一个运行rails 2.3.8的RoR应用程序,它使用Rails 3样式的UJS来绑定数据远程表单而不是使用form_for_remote,控制器使用来自服务器的js.erb文件进行响应。
在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出了什么问题。
感谢您的帮助!
编辑:
发布说明的表单:
<% 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 %>
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:text / javascript;字符集= UTF-8
我已经尝试为rails.js帮助程序显式设置数据类型,但这并没有改变任何内容。
答案 0 :(得分:1)
显然这里的解决方案是交换不同版本的rails.js
不确定为什么我的那个没有用,但看起来它不是上面任何代码中的错误。
答案 1 :(得分:0)
知道用于解决问题的版本会很棒。
更新:好的,所以我的方案是我使用jQuery 1.4.2和最新的rails.js。当我升级到jQuery 1.4.3时,这解决了我的问题。