2011-01-21 51 views
0

我有一个从我的_form.html.erb调用的以下JavaScript。从控制器方法或助手在rails 3中获取数据到ajax

$.ajax({ 
type: "GET", 
url: "/articles/" + $(this).attr('value'), 
success: function(data){} 
}); 

我想从这个请求中获取某种数据(可能是json对象或Article对象)。我不确定是否需要打电话给助手。当我打电话给一个控制器时,所有返回给我的是来自相应视图的html响应。

回答

4

您应该使用控制器中的respond_to块根据格式生成不同的响应。

def show 
    @article = Article.find(params[:id]) 
    respond_to do |format| 
    format.html 
    format.json { render :json => @article } 
    end 
end 

这样的模板将被渲染为与HTML头所有标准的要求,但如果您发送使用JSON头一个Ajax请求,这会使解析成JSON的文章。

更新:

使用下面的AJAX调用指定JSON作为预期的响应:

$.ajax({ 
    type: "GET", 
    dataType: "json", 
    url: "/articles/" + $(this).attr('value'), 
    success: function(data){} 
}); 
+0

响应我回来是HTML的响应。基本上我有一个函数在我进行GET调用的observe_field中。所以我需要将json对象返回到具有该字段的请求中,以便可以更新该页面中的字段。 – user140736 2011-01-21 03:00:14

0

使用参数又如:

JS:

$("#booking_addr_edit").click(function(event) { 
      var addressid = $('#appointment_order_currentaddress').val(); 
      $.ajax({ 
       type: "GET", 
       dataType: "json", 
       data: {address_id: addressid}, 
       url: '/booking/get_client_address', 
       success: function(data){ 
       $('#appointment_order_address').val(data[0].street +' '+ data[0].city + ' ' + data[0].state); 
       $('#appointment_order_phone').val(data[0].phone); 
       $('#appointment_order_apartment').val(''); 
       $('#booking_client_details').show(); 
       } 
      }); 
      event.preventDefault(); 
     }); 

控制器

def get_client_address 
    @address = Address.where(id: params[:address_id]) 
    respond_to do |format| 
     format.js { render :json => @address } 
    end 
    end 

路线

match "booking/get_client_address" => "booking#get_client_address"