簡體   English   中英

無法綁定ajax:使用form_for創建的表單成功...:remote => true

[英]Unable to bind ajax:success to form created with form_for … :remote => true

我正在使用Rails 3.1.1

我在haml視圖中有以下內容:

= form_for booking.notes.build, :remote => true do |f|
  = f.text_area(:content)
  = f.hidden_field(:noteable_id)
  = f.hidden_field(:noteable_type)
  = f.submit('Add note')

這會在提交時創建新筆記。 此外,我的控制器的響應正在Chrome控制台(網絡標簽)中正確顯示。 但我似乎無法抓住回應。

我想在提交后更新頁面上的注釋列表。 我一直試圖綁定到ajax響應,所以我可以抓住響應,但我失敗了。 例如,我認為這應該有效,但不是:

$('#new_note').bind('ajax:success', function() {
  alert('Hi');
});

但是沒有觸發警報。 我認為這解釋了為什么這也行不通。

 $('#new_note').bind("ajax:success", function(evt, data, status, xhr){
  // Insert response partial into page below the form.
  $(this).parent.append(xhr.responseText);

})

你能指點一下可能出現的問題嗎?

你試過'ajax:complete'嗎?

其他可能出錯的事情:

狀態代碼並非真正“成功”。 這觸發了jQuery的成功

if ( status >= 200 && status < 300 || status === 304 ) {

或者在呈現表單之前評估事件處理程序。 嘗試事件委托:

$("body").on('ajax:success', '#new_note', function(){...})

(小心,這是新的jQuery語法。如果使用舊的jQuery,請相應調整)

如果你願意,你可以把你的javascript放在create.js.erb中(這個文件中的代碼將在響應后執行到你的瀏覽器)並且在這個文件中你可以使用if語句,就像

<% if @ok %>
  //your code
<% end %>

如果在你的控制器的動作中將@ok設置為false,則響應將為空!

這通常是通過在控制器的視圖部分中執行create.js.erb文件來完成的(如果還沒有這樣做),在該文件中您可以訪問create動作中出現的任何變量,並且您可以在其中呈現您的html

在您的create.js.erb文件中,您可以編寫類似的內容

$("#new_note").html('<%= escape_javascript(render partial: "path/to/partial") %>');

在我剛才寫的這篇文章中閱讀更多內容,它幾乎解釋了整個流程

暫無
暫無

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

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