4

私は私のjquery ajaxの成功を持っています

success: function(data) {
    $('#someId').html(data);
}

_information.html.erb という名前の部分ファイルがあります

Rails partial view( ) に ajax 成功応答をレンダリングするにはどうすればよいですかinformation

このようなものを示すほとんどのリソース

$('#holderDiv').empty().append('<ul> <%= j render @comments %> </li>')

しかし、私はそれを快適に感じませんでした。それを解決する他の方法。

4

1 に答える 1

8

更新 ここにあなたのコメントに応じていくつかの詳細情報があります.

詳細については、まずJavascript に関するこのRails ガイドをお読みください。

update.js.erb はあなたのビューです。ビューに update.html.erb ファイルを用意する代わりに、コントローラーの format.js を含む Respond_to ブロックが update.js.erb (JavaScript コードとしてフォーマットされたもの) を jquery 関数に送り返します。

update.js.erb には純粋な JavaScript を含めることができます。ただし、javascript に変換される前にサーバーで処理されるため、任意の Ruby コードを埋め込むことができます。その ruby​​ コードは javascript に変換されます。

Chrome 開発者ツールを使用している場合は、jquery 呼び出しの実行後に「ネットワーク」タブを確認できます。作成した AJAX 呼び出しの新しいエントリが表示されます。エントリをクリックすると、返された JavaScript が表示されます。

以下の update.js.erb ファイルを少し更新して、通常の JavaScript コードを .js.erb ファイルに入れる方法を示しました。最初の行は JavaScript です。2 行目は、サーバーが JavaScript に変換する ruby​​ コードです。そのため、ブラウザに表示されるまでに、update.js.erb ファイル全体が JavaScript に変換されています。

それが役立つことを願っています...

以下の元の回答:

オプション1:

jQuery の成功関数がコントローラー アクションの正常な完了に関連付けられていると仮定すると (この例では編集アクションを使用します)、編集が成功した後に呼び出される update.js.erb というビューを作成します。

コントローラ:

if @user.update_attributes(params[:user])
    respond_to do |format|
        format.html { redirect_to @user, notice: "Successfully updated user." }
        format.js
    end
else
    # ...
end

これは javascript から呼び出され、respond_to ブロックに format.js があるため、update.js.erb が自動的に呼び出されます。

update.js.erb:

console.log('see... this is a regular javascript call.');
<%= render partial: 'information', format: 'js' %>

オプション 2

あなたが含めたスニペット:

$('#holderDiv').empty().append('<ul> <%= j render @comments %> </li>')

埋め込まれた ruby​​ コードが最初に処理され、次に javascript コードに変換される js.erb ファイルでのみ機能します。これは、次のような状況で機能します。

コントローラ:

def create
    user = User.new(params[:user])

    respond_to do |format|
        if @user.save
            @comments = 'some comments to display!'
            format.js
        else
            # ...
        end
    end
end

create.js.erb:

$('#holderDiv').empty().append('<%= j render @comments %>')
于 2013-10-02T06:10:57.580 に答える