55

jRailsの関数について言及しているブログに出くわしました。彼らはそれを使ってajaxスタイルのページを更新していました。

$('#cart').html("<%=j render @cart %>");

パーシャルを使用してパーシャルをレンダリングしているようですcartが、ポイントはj何ですか?文字列をJavaScriptが受け入れるものに変換するという記事をいくつか見つけましたが、それはどういう意味ですか?

4

2 に答える 2

80

ピーターは実際に正解を投稿しました。しかし、私は詳しく説明しようとします:

あなたはajaxの基本的な概念に精通していると思いますか?ぎこちない方法でコメントを作成できるようにしたいとします。レールでは、次の方法でPOSTリクエストに応答できますCommentsController

def create
  @comment = Comment.new(params[:comment])
  respond_to do |format|
    render.js
  end
end

これは、クライアントからのajaxリクエスト(jquery / javascriptを介して)が送信されたCommentsController場合、フォーマット()を認識し、 _create.js.erb.jsパーシャルで応答することを意味します。パーシャルは、次のような新しいコメントをレンダリングします。

$('.comments').append("<%=j render @comment %>");

ここで、jまたはescape_javascriptメソッドを取得します。 一部の悪意のあるユーザーは、次のメソッドを使用しない限り、ページで実行される(悪意のある)javascriptを含むコメントを送信する可能性があります。j

JavaScriptセグメントのキャリッジリターンと一重引用符および二重引用符をエスケープします。

したがって、ブラウザでのコードの実行を防ぎます。

于 2012-09-20T18:35:16.883 に答える
68

escape_javascript(javascript)

JavaScriptセグメントのキャリッジリターンと一重引用符および二重引用符をエスケープします。

エイリアスj()からも利用できます。

Railsのドキュメントから。

于 2012-09-20T18:20:45.390 に答える