2015-06-10 2 views
1

Я немного смущен: я пишу централизованный контроллер в соответствии с этим question, и я немного запутался в методах respond_to.Как использовать response_to для json?

В API::Controller я бы что-то вроде этого:

def index 
    @post = Post.all 
    render json: @posts 
end 

А на JS (AngularJS) сторону вещей, я бы что-то вроде этого:

$http.defaults.headers.common.Authorization = 'Token token='+ $scope.user.auth_token; 

$http.get('/api/posts').success(function (data) { 

    $scope.posts = data; 

}); 

Это работает отлично на контроллере API, однако я хочу использовать общий контроллер:

def index 
    @post = Post.all 
    respond_to do |format| 
    format.html { render layout: 'admin' } 
    format.json { render json: @invoices } 
    end 
end 

Но когда I tr y, чтобы выполнить вызов ajax, кажется, что API отвечает html, а не json.

Что мне не хватает?

ответ

2

Добавить .json в конце URL-адреса, с которым вы пытаетесь попасть. Таким образом, сервер будет знать, что запрос требует данных в формате JSON, а формат по умолчанию - HTML.

Если вы используете JQuery сделать AJAX, и вы хотите получить данные обратно в формате JSON без добавления .json в конце концов, вы можете использовать затем использовать функцию $.getJSON(), или может просто передать параметр dataType: "json" в вызове функции $.jquery():

$.ajax({ 
    dataType: "json", // To receive data back in JSON 
    url: url, 
    data: data, 
    success: success 
}); 
+0

Я скоро приму ответ (кажется, мне нужно подождать 5 минут). Вопрос, хотя, есть способ, которым я могу принять json без '.json' в конце URL-адреса? Это не похоже на требование в большинстве API-интерфейсов. – WagnerMatosUK

+0

Я использую AngularJS. Я также использую расширение Chrome под названием Postman для тестирования API, и оно работает только в том случае, если я добавлю к нему '.json'. Думаю, мне нужно установить 'json' в заголовок. Спасибо – WagnerMatosUK

+0

Я обновил свой вопрос. Что касается вас, вы сказали: «Это не похоже на требование в большинстве API-интерфейсов». Наилучшим образом, большинств APIs отвечают с JSON per se. И в случае, если они предоставляют несколько ответов, тогда вы несете ответственность за отправку правильного параметра для возврата данных в JSON. –