Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery AJAX成功后更改视图中的元素_Jquery_Ruby On Rails_Ajax_Forms - Fatal编程技术网

Jquery AJAX成功后更改视图中的元素

Jquery AJAX成功后更改视图中的元素,jquery,ruby-on-rails,ajax,forms,Jquery,Ruby On Rails,Ajax,Forms,谈到AJAX,我完全是个新手,需要一些帮助。我有一个posts\u控制器和一个likes\u控制器: 用户可以“喜欢”或“不喜欢”帖子。现在,我正在尝试实现AJAX,以便在用户“喜欢”一篇文章或“不喜欢”一篇文章时,like/inspect将进行切换 在AJAX之前,页面将刷新,视图中的代码将确定当前用户是否喜欢某篇文章。我在视图中运行了一个if语句,根据结果,显示了两种不同的表单。如果帖子还没有被喜欢,那么有一种表单可以“喜欢”帖子创建操作;如果帖子已经被喜欢,那么有一种表单可以“不喜欢”帖子

谈到AJAX,我完全是个新手,需要一些帮助。我有一个posts\u控制器和一个likes\u控制器:

用户可以“喜欢”或“不喜欢”帖子。现在,我正在尝试实现AJAX,以便在用户“喜欢”一篇文章或“不喜欢”一篇文章时,like/inspect将进行切换

在AJAX之前,页面将刷新,视图中的代码将确定当前用户是否喜欢某篇文章。我在视图中运行了一个if语句,根据结果,显示了两种不同的表单。如果帖子还没有被喜欢,那么有一种表单可以“喜欢”帖子创建操作;如果帖子已经被喜欢,那么有一种表单可以“不喜欢”帖子销毁操作

现在我已经使用AJAX实现了创建部分,类似的操作是动态进行的,但是视图没有改变,我可以看到类似的操作是通过终端/rails控制台创建的,但是链接上的文本保持不变。我想知道在不刷新页面的情况下更新视图的最佳方法是什么?一旦通过AJAX出现类似的情况,我需要用“不一样”链接和表单更新“相似”链接和表单。只有通过jquery才能做到这一点吗

这是我的密码: 控制器

class LikesController < ApplicationController

  def create
    @post = Project.find(params[:like][:likee_id])

    respond_to do |format|
      format.html{
        current_profile.like!(@post)
        redirect_to :back
      }
      format.js {
        current_profile.like!(@post)
      }
    end  

  end
  def destroy
    @post = Like.find(params[:id]).likee
    current_profile.unlike!(@post)
    redirect_to :back
  end
end
创建.js.haml文件:

:plain
  $(this).closest('form').submit()
任何帮助都将不胜感激。非常感谢你

您可以使用

$.post('url', data, function(returned_data){ $.('like_div').html(returned_data) })
但是,您可以使用rails生成一个链接,而不是手动创建链接:

= link_to url_for(...), :remote => true
这将起作用,即使js被禁用,您也不需要任何表单

- if current_profile.like?(post)
  = link_to url_for(:controller => :posts, :action => :unlike, :id => post.id), :remote => true
- else
  = link_to url_for(:controller => :posts, :action => :like, :id => post.id), :remote => true

当然,这个动作应该响应.js和.html。在后一个视图中,您可以呈现整个视图,在.js中,您可以插入一个js片段,将link div更改为这个刷新的。你需要更多的解释吗?

我在这里回答了我自己的[问题][1]。看看这能不能让你清醒一下。[1]:
- if current_profile.like?(post)
  = link_to url_for(:controller => :posts, :action => :unlike, :id => post.id), :remote => true
- else
  = link_to url_for(:controller => :posts, :action => :like, :id => post.id), :remote => true