Получите данные от метода контроллера или помощника в рельсах 3 к ajax - PullRequest
0 голосов
/ 21 января 2011

У меня есть следующий javascript, который я вызываю из моего _form.html.erb.

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

Я хотел бы получить какие-то данные обратно (возможно, объект json или объект Article) из этого запроса. Я не уверен, нужно ли мне вызывать помощника или нет. Когда я вызываю контроллер, все, что он возвращает мне, - это ответ html из соответствующего представления.

Ответы [ 2 ]

4 голосов
/ 21 января 2011

Вам, вероятно, следует использовать блок response_to в вашем контроллере для генерации разных ответов в зависимости от формата.

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

Таким образом, шаблон будет отображаться для всех стандартных запросов с заголовками html, но если вы отправите запрос ajax с заголовками json, он будет обрабатывать статью, проанализированную в json.

Обновление:

Используйте следующий вызов ajax, чтобы указать json в качестве ожидаемого ответа:

$.ajax({
    type: "GET",
    dataType: "json",
    url: "/articles/" + $(this).attr('value'),
    success: function(data){}
});
0 голосов
/ 15 марта 2014

Другой пример с параметрами:

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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...