我正在使用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);
})
你能否指出我可能出现的问题?
答案 0 :(得分:9)
你试过'ajax:complete'吗?
其他可能出错的地方:
状态代码并非真正“成功”。这会在jQuery中取得成功
if ( status >= 200 && status < 300 || status === 304 ) {
或者在呈现表单之前评估了事件处理程序。尝试事件委托:
$("body").on('ajax:success', '#new_note', function(){...})
(小心,这是新的jQuery语法。如果使用旧的jQuery,请相应调整)
答案 1 :(得分:1)
如果你愿意,你可以将你的javascript放在create.js.erb中(此文件中的代码将在响应后进入你的浏览器) 在这个文件中你可以使用if语句,比如
<% if @ok %>
//your code
<% end %>
如果在你的控制器的动作中将@ok设置为false,则响应将为空!
答案 2 :(得分:0)
这通常是通过在控制器的视图部分中执行create.js.erb
文件来完成的(如果还没有这样做的话),在该文件中您可以访问创建操作中出现的任何变量,并且您可以在其中进行渲染你的HTML
在您的create.js.erb
文件中,您可以编写类似
$("#new_note").html('<%= escape_javascript(render partial: "path/to/partial") %>');
在this post中阅读更多我前段时间写过的内容,它几乎解释了整个流程