2016-06-21 56 views
0

我正在开发一个应用程序,用户可以在其中心(如)故事。我试图用ajax来实现它。我有一个StoryController与心脏行动。每当心脏(如)被点击时,我已经用heart.js.erb做出了回应并发送了一个请求。我正在努力更新用户点击心脏链接时的心脏数量。但是我得到的是通过ajax的无限请求。以下是心脏行动的片段。ajax上的无限请求

# Give your heart to someone 
    def heart 
    respond_to do |format| 
     format.js 
     format.html 
    end 
    end 

和AJAX请求是:

$('#heart-story-<%= j params[:id]%>').html('<%= @hearts %>') 
$.post("/stories/<%= j params[:id]%>/heart", <%= j params[:id] %>) 
console.log("<%= j params[:id] %>") 

那是什么我得到无限的请求可能的原因? 这条路线是:

#Stories 
resources :stories, only: [:show, :create, :destroy] do 
member do 
    get :heart, :unheart 
    post :heart, :unheart 
end 
# Comments 
resources :comments, only: [:index, :new, :create, :destroy] 
end 

回答

0

如果指定按照heart.js.erb代码,那么这将是无限的:

$('#heart-story-<%= j params[:id]%>').html('<%= @hearts %>') 
$.post("/stories/<%= j params[:id]%>/heart", <%= j params[:id] %>) 
console.log("<%= j params[:id] %>") 

发布采购信息应该只按一下按钮触发一次穿上” t在heart.js.erb中使用它

+0

谢谢。我会给它一个镜头。 – veekram

0

只要对此操作的AJAX请求成功,就会呈现heart.js.erb视图。您应该将其视为您的AJAX请求的回调,而不是您为AJAX请求编写逻辑的地方。在这个视图中,您必须实现在成功的AJAX请求后更新UI的逻辑。

您应该使用远程链接,如:

<%= link_to '<3', heart_story_path(@story), remote: true %> 

然后在你heart.js.erb你应该删除的AJAX调用。它应该看起来像这样:

$('#heart-story-<%= j params[:id]%>').html('<%= @hearts %>') 
+0

所以我应该从js.erb中删除发布请求? – veekram