2013-05-31 24 views
0

我有一個會從控制器發送的,像這樣的AJAX請求: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內。這並不是我剛剛用它作爲示例的表格標籤所獨有的。任何時候有多條線路都不會顯示出來。

響應時,它的工作原理:

$('#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請求的系統工作正常,在我的另一個應用程序。任何幫助將不勝感激,非常感謝!

回答

0

原來我忘了在'render'之前加入'escape_javascript'。我正要在淋浴中淹死自己。謝謝你的答案。

2

讓字符串在幾行而不是一個單一的長行中這麼重要嗎? 如果是這樣,使用這樣的:

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

上表僅被適當地呈現在所有的代碼是在一行上。如果我按下回車鍵,它在AJAX請求通過後不會出現在目標div內。

這是因爲JS不允許文字文字轉過多行。在幾個方面

您可以變通解決(你應該在你的錯誤控制檯得到相應的錯誤信息。):

  • 連接幾個單行文字與+爲卡米爾已經建議。
  • 終止每行\字符(這樣JS允許文本文字在下一行繼續)。
  • 可能比較容易,如果你不需要換行代碼中的輸出可讀性(但仍需要在價值換行符):在你的文本與\n(實際兩個字符\n)更換換行符,所以JS會看到類似「Foo \ nBar」的內容。這仍然意味着實際值中的換行符,但它不會中斷JS語法。
  • 如果您不需要實際值中的換行符,則完全刪除換行符(並將其替換爲空格)。

所有這些都可以在服務器端自動完成。