2010-04-13 52 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