【问题标题】:jQuery RJS inserting string vs domjQuery RJS 插入字符串与 dom
【发布时间】:2010-04-13 19:58:38
【问题描述】:

所以我正在尝试使用 jQuery 从 ajax 调用中插入数据。

我实际上使用了 jquery.form 插件,并使用 dataType: 'script' 提交了 ajax 表单。

响应是一个 jquery 表达式,其中包含一个 <%= javascript_escape(render ...) %> erb 标记(类似于 railscasts 第 136 集的指示)。然而最终结果是渲染的全文被插入,就好像这是要插入页面的内容一样,作为文本,而不是作为 dom 元素。

渲染开头有一些换行符的事实可能是原因吗?

Dom 文本:"\n \n <li>....</li>"

我还尝试让 jQuery 将响应作为脚本读取并执行它,并使用基于原型的 rjs 东西,同样的效果,文本被插入到 dom 中。是否有任何原因会导致出现这种行为?

澄清一点:

我的 response.js.erb 是

jQuery("#content").append("<%= escape_javascript(render(:partial => "widgets")) %>");
jQuery("#information").text("Finally, something happened!");

append() 调用中的全文作为文本插入到#content 中。

更新:

我一直在研究这个问题。原来 rails 转义 字符的原因是因为它认为它正在呈现一个常规的 .html 文件。原因是它没有迹象表明 .js 即将到来,因为帖子是使用 iframe 完成的(帖子包含一个文件)。如果我在请求的末尾添加一个 .js,我可以做一个 respond_to do |format| format.js 但它不支持 http 帖子。有没有办法将其配置为接受 .js 请求上的帖子以执行操作?

【问题讨论】:

    标签: jquery ruby-on-rails


    【解决方案1】:

    我猜这是因为您将 dataType 设置为“脚本”。如果您希望将 AJAX 调用的结果视为 DOM 元素,请将其更改为 HTML。

    这还取决于您如何将结果插入到文档中。我怀疑是这种情况,但如果你使用 .text() 而不是 .html(),你会得到纯文本而不是 DOM 元素。

    【讨论】:

    • 不完全是,我考虑过更改对 HTML 的响应,只是让我的脚本在适当的地方将其注入,但我想要一个更 RJS 样式的行为。请参阅我的说明。
    • 看起来这必须是可以接受的答案。 Rails 似乎不支持在不进行 HTML 实体转义的情况下呈现 erb 模板。因此,当输出发送到 iframe 时,所有内容都被转义且无法使用。
    猜你喜欢
    • 2011-07-16
    • 2016-09-14
    • 2015-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多