如何在RoR中访问Jquery的Ajax调用?

时间:2011-09-19 18:24:11

标签: ruby-on-rails ajax jquery

伙计我对这个RoR真的很新,此时我遇到了“如何在RoR中使用Jquery的ajax()调用的复杂情况?”

我有一个叫做像这样的项目的控制器

class ProjectsController < ApplicationController
    def stagemilestone
      @milestones=Milestone.find_by_sql("SELECT name, created_at FROM milestones WHERE stage=1")
    end
end

我希望从jquery的ajax调用中调用此操作并返回数据,为此我正在使用这样的

$.ajax({
  url: "/projects/stagemilestone",
  success: function(){
   //here i need the returned data from controller
   // means output of @milestones
  }
});

所以请帮帮我,怎么做?

4 个答案:

答案 0 :(得分:1)

伙计们最后我发现解决方案跟随并且工作得很好!!

<强>控制器

def stagemilestone
    @milestones=Milestone.find(:all, :conditions => ["status_id=? and project_id=?",params[:stageid], params[:id]])
    respond_to do |format|
      format.html # index.html.erb
      format.json  { render :json => @milestones}
    end
end

和我的 char.js 看起来像这样

$.ajax({
    type : 'get',
    url : "/projects/stagemilestone",
    data : "stageid=" + $(this).attr('name') + "&id=" + $.cookie('projectid'),    
    dataType : 'json',
    async : false,
    context : document.body,
    success : function(response) {

    }
  });

答案 1 :(得分:0)

我认为你想要的是使用“respond_to”

像这样

class ProjectsController < ApplicationController
  def stagemilestone
     @milestones=Milestone.find_by_sql("SELECT name, created_at FROM milestones WHERE stage=1")
     respond_to do |format|
       format.js {render :json => @milestones}
     end
  end
end

以下是有关respond_to,http://apidock.com/rails/ActionController/MimeResponds/InstanceMethods/respond_to

的更多信息

更新:你可能想要仔细检查你的ajax请求的接受标题(你可以在firebug中查看请求),你可能需要使用format.json。请参阅此处获取MIME类型的完整列表,并确保它们匹配:  http://apidock.com/rails/Mime

答案 2 :(得分:-1)

为成功回调添加参数;它将包含响应值。

 success: function(response)
 {
     // response will be the HTTP / JSON / text returned from your controller
 }

答案 3 :(得分:-1)

只需在回调函数中添加一个参数,例如:

  $.ajax({
  url: "/projects/stagemilestone",
  success: function(output){
   //Do something with 'output'
  }
});