[英]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.