3

Rails 2.3.8 を実行している RoR アプリがあります。これは、Rails 3 スタイルの UJS を使用して、form_for_remote を使用する代わりに data-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

問題を修正するために使用したバージョンをお知らせいただければ幸いです。

更新: OK、私のシナリオは、最新の rails.js で jQuery 1.4.2 を使用していたというものでした。jQuery 1.4.3 にアップグレードすると、問題が解決しました。

于 2010-10-19T04:36:31.880 に答える