2017-07-31 48 views
1

我希望用戶能夠發佈沒有瀏覽器刷新整個頁面的註釋,如何發表評論無需刷新頁面,

對於現在的意見被提交,但是,我所面臨的問題在用戶提交評論後,該頁面以及用戶在表單中放置的任何內容都會保留,我希望它能夠正確提交,並且在成功提交表單後用戶輸入應該清除。

我控制器操作

def create 
    @post = Post.find(params[:post_id]) 
    @comment = @post.comments.new(comment_params) 


    @comment.user = current_user 
    if @comment.save 
     respond_to do |format| 
      flash[:notice] = "Successfully created a comment" 
      format.json { render json: @post } 
     end 
    else 
     redirect_to :back 
    end 
end 

我查看

<div class="header-wrapper-blog"> 
    <div class="heading_for_blog"> 
    <div class="container"> 
     <%= simple_form_for([@post, @post.comments.build], remote: true, :html => {:multipart => true, id: "newcomment" }) do |f| %> 
     <%= f.input :body, as: :text %> 
     <button type="submit" class="btn btn-success" id="comment-form" name="submit"/>Submit</button> 
     <% end %> 
    </div> 
    </div> 
</div> 

我當前的Ajax代碼

$(function(){ 
    $("#newcomment").on("submit", function(event){ 


    $.ajax({ 
     type: "POST", 
     url: this.action, 
     data: $(this).serialize(), 
     success: function(response) { 
     //update the DOM 
     } 
    }); 
    event.preventDefault(); 
    }); 
}) 

回答

0

首先所有如果你使用remote: true,那麼不需要觸發另一個Ajax事件,你正在做的事情。 所以現在你會有兩種情況,A.With remote: true B.觸發Ajax。

從您的控制器中移除format.json { render json: @post }行,rails將在您各自的控制器視圖內呈現文件create.js.erb。在該文件中,您可以編寫清除該表單或更新特定div的邏輯。 例如$(#newcomment).reset();,你可以更新一個div也喜歡$(#div).html("blah");

b。如果您從表單中刪除remote: true那麼你可以使用AJAX,你剛纔提到,但在這種情況下,添加dataType: script,它會呈現相同create.js.erb。如果你不想按照上面的方法,那麼你可以在你的成功回調ajax時調用這條線$(#newcomment).reset();;

相關問題