2010-04-13 36 views
1

所以我试图用jQuery从ajax调用插入数据。jQuery RJS插入字符串与dom

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

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

事实上渲染器在开始时有一些换行符是原因吗?

DOM文字:"\n \n &lt;li>....&lt;/li>"

我也试过有jQuery的只是读取响应为脚本并执行它,并且使用了基于原型的RJS的东西,同样的效果,文本插入到DOM。有没有什么原因会导致这种行为?

澄清一下:

我response.js.erb是

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

追加()调用内部的全文作为文本插入到#内容。

更新:

我一直在对这个问题进行一些研究。原因是为什么rails逃避<>字符是因为它认为它正在呈现常规的.html文件。原因是它没有指示.js即将到来,因为该帖子是使用iframe完成的(该帖子包含一个文件)。如果我在请求的末尾添加.js,我可以执行respond_to do |format| format.js,但它不支持http帖子。有没有办法将其配置为接受针对某个操作的.js请求的帖子?

回答

1

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

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

+0

不是,我考虑过改变对HTML的响应,只是让脚本将它注入适当的位置,但我想要更多的RJS风格行为。看到我的澄清。 – 2010-04-13 20:23:22

+0

看起来这将是必须的答案。 Rails似乎不支持在不进行HTML实体转义的情况下渲染erb模板。因此,当输出发送到iframe时,所有内容都会被转义并且无法使用。 – 2010-04-14 14:40:13