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>

只有当所有代码都在一行上时,上表才会正确呈现。如果我按返回键,则在 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

将字符串放在几行而不是一条长线中是否如此重要?如果是这样,请使用类似:

$('#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

只有当所有代码都在一行上时,上表才会正确呈现。如果我按返回键,则在 AJAX 请求通过后,它不会显示在目标 div 中。

那是因为 JS 不允许文本字面量跨越多行。(并且您应该在错误控制台中收到相应的错误消息。)

您可以通过多种方式解决此问题:

  • +正如 Kamil 已经建议的那样,将几个单行文字连接起来。
  • 用一个字符结束每一行\(这样 JS 允许文本文字在下一行继续)。
  • 如果您的代码输出中不需要换行符以提高可读性(但仍需要值中的换行符),这可能是最简单的:用\n(实际的两个字符\n)替换文本中的换行符,以便 JS 看到类似“ Foo\n酒吧”。这仍然意味着实际值中的换行符,但它不会破坏 JS 语法。
  • 如果您在实际值中不需要换行符,请完全删除换行符(并用空格替换它们)。

所有这些都可以在服务器端自动完成。

于 2013-05-31T08:06:32.020 回答
0

原来我忘了在“渲染”之前包含“escape_javascript”。我正要在淋浴时淹死自己。谢谢你的回答。

于 2013-05-31T13:01:53.433 回答