簡體   English   中英

僅當所有代碼都在一行上時,AJAX請求才能正常運行

[英]AJAX request only functioning properly when all the code is on one line

我有一個這樣的控制器發送的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請求的相同系統在我的另一個應用程序中也可以正常工作。 任何幫助將不勝感激,非常感謝!

將字符串分成幾行而不是一條長行是否很重要? 如果是這樣,請使用類似以下內容的方法:

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

僅當所有代碼都在一行上時,上表才會正確呈現。 如果我按回車鍵,則在AJAX請求通過后它不會顯示在目標div中。

這是因為JS不允許文本文字跨越多行。 (並且您應該在錯誤控制台中獲得了相應的錯誤消息。)

您可以通過以下幾種方法解決此問題:

  • 正如Kamil所建議的,將多個單行文字與+連接起來。
  • \\字符終止每一行(這樣JS允許文本文字在下一行繼續)。
  • 如果您不需要代碼輸出中的換行符以提高可讀性(但仍需要該值的換行符),則可能是最簡單的:用\\n (實際的兩個字符\\n )替換文本中的換行符,以便使用JS看到類似“ Foo \\ nBar”的信息。 那仍然意味着實際值中有換行符,但是並沒有破壞JS語法。
  • 如果您不需要實際值中的換行符,請完全刪除換行符(並用空格替換)。

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

原來我忘了在“渲染”之前包括“ escape_javascript”。 我要去洗個澡淹死自己。 謝謝你的回答。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM