3

我有一个运行 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 帮助程序显式设置数据类型,但这并没有改变任何东西。

4

2 回答 2

1

显然,这里的解决方案只是换入不同版本的 rails.js

不知道为什么我没有工作,但看起来这不是上面任何代码中的错误。

于 2010-09-26T00:31:57.710 回答
0

很高兴知道您用来解决问题的版本。

更新:好的,所以我的情况是我正在使用带有最新 rails.js 的 jQuery 1.4.2。当我升级到 jQuery 1.4.3 这解决了我的问题。

于 2010-10-19T04:36:31.880 回答