2011-07-28 111 views
1

我正在创建一个简单的Ajax功能到我的应用程序中,用户可以通过链接增加“like count”。未执行Rails 3 Ajax响应

我已经设法得到运行我的控制器代码的链接,浏览器得到一个回应,但不执行响应。

等等环节是部分:

.likes      
    .like_up                 
    = link_to(image_tag('/images/thumb_up.png'), '/like/' + question.id.to_s, :remote => true) 
    #like_count 
    = 22# question.likecount             
    .like_down 
    = link_to(image_tag('/images/thumb_down.png'), '/dislike/' + question.id.to_s, :remote => true) 

而且它进入likes_controller:

def up 
    @like = current_user.likes.create(:question_id => params[:question_id], :like => true) 
    respond_to do |format| 
    format.js 
    end 
end 

然后在我的up.js.haml我只是有一个调试的javascript:

alert('2'); 

没有别的。

当我按下浏览器之类的链接轨登录TELS我,这已使js.haml

... 
Rendered likes/up.js.haml within layouts/application (104.9ms) 
Completed 200 OK in 923ms (Views: 116.3ms | ActiveRecord: 20.1ms) 

当我看到浏览器获得它肯定响应看起来像up.js .haml渲染到放置yield标签的应用程序布局中。

<div class='content'> 
    alert('2'); 
    </div> 

我怀疑这不是浏览器想要回来的东西。在ajax请求期间查看Firebug控制台时,发送请求后也不会发生任何事情。

有人可以找出为什么这不起作用吗?我发现的每一个教程和指南都和我在这里做的一样。

回答

2

首先,确保内容类型是正确的:

curl --head -X POST http://localhost:8080/.... 

我相信Content-Type应该text/javascript

其次,我想你想禁用布局,使DIV不出现在输出中。

def up 
    @like = current_user.likes.create(:question_id => params[:question_id], :like => true) 
    respond_to do |format| 
    format.js { render :partial => 'up', :layout => false } 
    end 
end 

或者,也许在整个控制器

layout false 
+1

谢谢man :)禁用布局解决了这个问题。 curl说,即使在ajax开始工作之后,Content-Type仍然是text/html。 – Mika

+0

也许你可以做渲染:js =>'up'或渲染:partial =>'up',:format =>'json' –

+0

这也只是为我修复,尽管我从来没有必须包含它。任何想法为什么会奏效? –

0

它发生在我在一个简单的遥控形式将其禁用。

重新启动服务器后工作,甚至是开发环境。

希望我在浪费的时间内拯救别人。

此致敬礼。