0

次のようにコントローラーから送信されるAJAXリクエストがあります。

コントローラーで:

  respond_to do |format|
    format.js {render 'show_data'}
  end

show_data.js.erb

$('#foo').html("<%= render partial: "foo/show_data" %>");

部分的に: _show_data.html.erb

<table> <tr> <th><%= "Name" %> </th> <th><%= "ID" %> </th> </tr> <tr> <td> <%= "Steve" %> </td> <td> <%= "1"%> </td> </tr> </table>

上記の表は、すべてのコードが 1 行にある場合にのみ適切にレンダリングされます。Return キーを押しても、AJAX リクエストが通過した後、ターゲット div 内に表示されません。これは、先ほど例として使用した table タグに固有のものではありません。複数の行がある場合は常に表示されません。

動作時のレスポンス:

$('#proto').html("<table> <tr> <th>Name </th> <th>ID </th> </tr> <tr> <td> Steve </td> <td> 1  </td> </tr> </table>");

うまくいかないときの対応:

$('#proto').html("<table> <tr> <th>Name </th> <th>Rep ID </th> </tr> <tr> <td> @rep.name </td> <td> @rep.id  </td> </tr> </table>
");

AJAX リクエストを作成するこの同じシステムは、私の別のアプリでも正常に機能します。どんな助けでも大歓迎です、どうもありがとう!

4

3 に答える 3

2

文字列を 1 行の長い行ではなく、数行にまとめることが重要ですか? その場合は、次のようなものを使用します。

$('#proto').html(
       "<table> <tr> <th>Name </th>"
     + "<th>ID </th> </tr>"
     + "<tr> <td> Steve </td>"
     + "<td> 1  </td> </tr> </table>"
);
于 2013-05-31T07:50:06.297 に答える
2

上記の表は、すべてのコードが 1 行にある場合にのみ適切にレンダリングされます。Return キーを押しても、AJAX リクエストが通過した後、ターゲット div 内に表示されません。

これは、JS がテキスト リテラルが複数行にまたがることを許可していないためです。(そして、エラー コンソールに対応するエラー メッセージが表示されるはずです。)

これはいくつかの方法で回避できます。

  • +Kamil が既に提案したように、いくつかの 1 行のリテラルを連結します。
  • すべての行を\文字で終了します (こうすることで、JS はテキスト リテラルが次の行に続くことを許可します)。
  • 読みやすさのためにコード出力に改行が必要ない場合 (ただし、値に改行が必要な場合) はおそらく最も簡単です: テキスト内の改行を\n(実際の 2 文字\n) に置き換えて、JS が " Foo\nバー". これは実際の値の改行を意味しますが、JS 構文が壊れることはありません。
  • 実際の値に改行が必要ない場合は、改行を完全に削除します (スペースに置き換えます)。

これらはすべて、サーバー側で自動的に実行できます。

于 2013-05-31T08:06:32.020 に答える