0

我有 ajax 评论提交和删除,提交完美但删除不起作用。

以下是我的代码:-

控制器

def destroy
  @status_update = StatusUpdate.find(params[:id])
    if @user == current_user
      if @status_update.destroy
        respond_with do |format|
          format.html do
            if request.xhr?
              render :partial => "users/post_status_update", :locals => {:user => @user}, :layout => false, :status => :created
            else
              redirect_to @user
            end
          end
        end
      end
    end
  end

Javascript

$(document).ready(function(){

  $('.delete-status-update')
    .on("ajax:beforeSend", function(evt, xhr, settings){
    })

    .on("ajax:success", function(evt, data, status, xhr){
      $('.status-partial').replaceWith(xhr.responseText);

    })

});

看法

.status-partial
  -@user.status_updates.latest.limit(5).each do |status_update|
    .row-fluid.cycle-status-update{:class => cycle("dark", "light")}
      .row-fluid
        .span11
          = status_update.status
        .span1
          .delete-status-update-link
            %strong= link_to "X", [@user,status_update], :remote => true, :method => :delete, :class => "delete-status-update"
      .row-fluid
        .time-ago-in-words
          ="#{time_ago_in_words(status_update.created_at)} ago"

问题是,一旦我单击删除链接,状态部分没有被替换,在刷新页面 ajax 删除第一次工作后,它再次停止工作。

4

3 回答 3

1

你不必要地使一切复杂化。您的销毁控制器可能很简单,如下所示:

def destroy
  @status_update = StatusUpdate.find(params[:id])
  if @user == current_user
    unless @status_update.destroy
      redirect_to @user
    end
  end
end

在您看来,不要通过 $.ajax 调用,而是尝试使用 railslink_to "action", action_path, remote: true

将您的 html 视图文件命名为 destroy.js.erb。

这些可以是它的内容:

$('.status-partial').html(<%= @user.generate_new_content.to_s %>);

Rails 将负责其余的工作。当您单击链接时,具有“状态部分”类的元素将其 html 内容替换为“一些新内容”。

将 HTML 和 AJAX 响应分开是一种很好的做法,Rails 提供了一种方便的方法来做到这一点。用它。

于 2013-02-08T08:13:58.550 回答
0

问题在于 javascript 文件中使用的语法.on,它不像.live. 将语法更改为

$(document).ready(function(){

  $(document).on("ajax:success", "#create_status_update_form", function(evt, data, status, xhr){
      $('.status-partial').replaceWith(xhr.responseText);
      $('.comment-text').val('');
    })

});

解决了这个问题。

于 2013-02-11T04:57:23.523 回答
0

我认为如果你这样做会更好

respond_with do |format|
format.js

然后调用一个文件destroy.js.erb来放置删除后应该触发的javascript

于 2013-02-08T05:52:31.657 回答