我目前正在开发一个Rails应用程序,在单击一个表单时会触发一个AJAX请求。请求只成功发送一次,但是下面的JQuery事件被触发了看似任意的次数(从1到15)。基本上,有一个AJAX请求,记录了许多AJAX事件。这导致返回的注释多次插入。
$(document).ready(function() {
jQuery(function () {
//target comment-form from comment form partial
$(document)
.on("ajax:beforeSend", '.comment-form-div', function (evt, xhr, settings) {
console.log("Ajax request sent")
return $(this).find('text_area')
.addClass('uneditable-input')
.attr('disabled', 'disabled');
})
.on("ajax:success", '.comment-form-div', function (evt, data, status, xhr) {
console.log("Ajax request successful")
$(this).find('text_area')
.removeClass('uneditable-input')
.removeAttr('disabled', 'disabled')
.val('');
$(this).hide('slow')
return $(xhr.responseText).hide().insertAfter($(this)).show('slow');
});
});
});
供参考,这是html中的Rails表单:
<div class="comment-form-div" id='master-comment-form'>
<%= form_for(comment, remote: true) do |f| %>
<div class="field">
<%= f.text_area :body, :placeholder => "Add a comment" %>
<%= f.hidden_field :commentable_id, value: comment.commentable_id %>
<%= f.hidden_field :commentable_type, value: comment.commentable_type %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
</div>
答案 0 :(得分:0)
你不应该劫持ajax:beforeSend既不是ajax:成功,只是将你的业务逻辑(javascript)放入update.js.erb
你可以写一些“console.log('ajax:success fired!')”,如果你想检查它什么时候被解雇了。