0

私はバニラのjavascriptを使用しており、単純なアラートメッセージをレンダリングするだけですが、JSコードを平面文字列としてレンダリングします。これが私のコードです

def index
render :js => "alert('Hello Rails');"
end

同じ文字列 "alert('Hello Rails');" をレンダリングします。警告メッセージの代わりに表示されます。私は Rails 3 にいて、Railsガイドとしてコードは問題ないようです。

任意の回答をいただければ幸いです。ありがとう

4

2 に答える 2

2

次の 2 つのスニペットを比較します。

<!DOCTYPE HTML>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <script>
    alert('Hello Rails');
    </script>
</body>
</html>

<!DOCTYPE HTML>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    alert('Hello Rails');
</body>
</html>

1 つ目は警告メッセージを生成し、2 つ目は文字列を表示するだけです。<script>タグでラップされていない限り、ブラウザーは JS コードを実行しません。@Erez 回答での jQuery ajax 呼び出しも、<script>内部で応答をラップします。

したがって、アクションに直接アクセスする場合は、それを<script>でラップするか、javascript_tag ヘルパーを使用することをお勧めします (http://api.rubyonrails.org/classes/ActionView/Helpers/JavaScriptHelper.html#method-i-javascript_tag)。

于 2012-09-19T08:02:40.237 に答える
0

あなたはJSをうまくレンダリングしています。問題は、この JS を受信して​​プレーン テキストとして表示するブラウザにあります。

(ここでは JQuery を使用して) AJAX リクエストを送信してみてください。

$.ajax(url: '/index/url', type: 'GET', dataType: 'script')

dataType が script に設定されていることに注意してください。つまり、JQuery は返されたテキストを JS として実行します。

これの短いバージョンは次のようになります

$.getScript('/index/url');
于 2012-09-19T07:17:39.397 に答える