简体   繁体   English

Rails返回html而不是json

[英]Rails is returning html instead of json

I'm doing the Pro AngularJS book's tutorial. 我正在编写Pro AngularJS书的教程。 Instead of using deployd I'm using rails on the backend. 而不是使用部署,而是在后端使用rails。 I'm trying to load in products using JSON via /api/v1/products but when I printout the results the response is the layout html instead of json. 我正在尝试通过/api/v1/products products使用JSON加载/api/v1/products但是当我打印出结果时,响应是布局html而不是json。

routes.rb 的routes.rb

resources :store, only: :index
get '*app', to: 'store#index'

resources :products, only: :index
resources :sessions

namespace :api, constraints: {format: :json}, defaults: {format: :json} do
  namespace :v1 do
    resources :products
    resources :orders do
      resources :products
    end
  end
end

products_controller.rb products_controller.rb

class Api::V1::ProductsController < ApplicationController

  respond_to :json

  def index
    @products = Product.all

    respond_with @products
  end
end

productListController.js productListController.js

var plCtrl = this;
plCtrl.data = {};

$http.get("/api/v1/products")
.success(function(data){
  plCtrl.data.products = data;
  console.log(plCtrl.data.products);
})
.error(function(error){
  plCtrl.data.error = error;
});

development.log development.log

Started GET "/" for ::1 at 2015-11-08 10:16:39 -0600
  [1m[36mActiveRecord::SchemaMigration Load (29.5ms)[0m  [1mSELECT `schema_migrations`.* FROM `schema_migrations`[0m
Processing by StoreController#index as HTML
  Rendered store/index.html.slim within layouts/application (31.0ms)
  Rendered layouts/_navigation_links.html.slim (2.3ms)
  [1m[35mUser Load (0.5ms)[0m  SELECT  `users`.* FROM `users` WHERE `users`.`password_digest` = '$2a$10$FFHrMCASASl8cNMumUC8ZuNwTiZUmoe5i0i.jBW2./.h5iVlNxLZa' LIMIT 1
  Rendered layouts/_navigation.html.slim (70.6ms)
  Rendered layouts/_messages.html.slim (5.1ms)
Completed 200 OK in 916ms (Views: 898.1ms | ActiveRecord: 17.7ms)


Started GET "/" for ::1 at 2015-11-08 10:16:43 -0600
Processing by StoreController#index as HTML
  Rendered store/index.html.slim within layouts/application (0.0ms)
  Rendered layouts/_navigation_links.html.slim (0.0ms)
  [1m[36mUser Load (0.3ms)[0m  [1mSELECT  `users`.* FROM `users` WHERE `users`.`password_digest` = '$2a$10$FFHrMCASASl8cNMumUC8ZuNwTiZUmoe5i0i.jBW2./.h5iVlNxLZa' LIMIT 1[0m
  Rendered layouts/_navigation.html.slim (2.2ms)
  Rendered layouts/_messages.html.slim (0.0ms)
Completed 200 OK in 120ms (Views: 119.1ms | ActiveRecord: 0.3ms)


Started GET "/assets/users-539b1b2d248fcacaf845c897cae976a6.css?body=1" for ::1 at 2015-11-08 10:16:43 -0600


Started GET "/assets/products-539b1b2d248fcacaf845c897cae976a6.css?body=1" for ::1 at 2015-11-08 10:16:43 -0600


Started GET "/assets/application-8dd662d13284733bbe54eda20bb23cc6.js?body=1" for ::1 at 2015-11-08 10:16:43 -0600


Started GET "/assets/jquery-cebd6aebb61826123f8c2609ef491120.js?body=1" for ::1 at 2015-11-08 10:16:43 -0600


Started GET "/assets/jquery_ujs-e37afeff66df4b941f3d0e5103f67860.js?body=1" for ::1 at 2015-11-08 10:16:43 -0600


Started GET "/assets/framework_and_overrides-59b1f67c44fcf715fcb2e3d8898788ac.css?body=1" for ::1 at 2015-11-08 10:16:43 -0600


Started GET "/assets/stores-539b1b2d248fcacaf845c897cae976a6.css?body=1" for ::1 at 2015-11-08 10:16:43 -0600


Started GET "/assets/application-5c74ddfe9ec142533cae4e72117a6749.css?body=1" for ::1 at 2015-11-08 10:16:43 -0600


Started GET "/assets/angular-6e1e5cba38bc1135b8f51b46fe8b1817.js?body=1" for ::1 at 2015-11-08 10:16:43 -0600


Started GET "/assets/angular-resource-750afd404dad9b9a65500978142d97e6.js?body=1" for ::1 at 2015-11-08 10:16:43 -0600


Started GET "/assets/angular-ui-router-a716fee384609b743dd55ab0468bf63f.js?body=1" for ::1 at 2015-11-08 10:16:43 -0600


Started GET "/assets/store/controllers/productListControllers-347157b211789b303302e8bcc711500b.js?body=1" for ::1 at 2015-11-08 10:16:43 -0600


Started GET "/assets/angular-ui-router/angular-ui-router-a716fee384609b743dd55ab0468bf63f.js?body=1" for ::1 at 2015-11-08 10:16:43 -0600


Started GET "/assets/store/app-5e5e1b9c4edcec361da040220caec84c.js?body=1" for ::1 at 2015-11-08 10:16:43 -0600


Started GET "/assets/angular-resource/angular-resource-750afd404dad9b9a65500978142d97e6.js?body=1" for ::1 at 2015-11-08 10:16:43 -0600


Started GET "/assets/angular/angular-6e1e5cba38bc1135b8f51b46fe8b1817.js?body=1" for ::1 at 2015-11-08 10:16:43 -0600


Started GET "/assets/store/filters/customFilters-bfac291ac9405f569cf8cd59b6d64108.js?body=1" for ::1 at 2015-11-08 10:16:43 -0600


Started GET "/assets/store/templates/index-c54274a6b50c826831690b83850c84c1.html" for ::1 at 2015-11-08 10:16:43 -0600


Started GET "/api/v1/products" for ::1 at 2015-11-08 10:16:43 -0600
Processing by StoreController#index as HTML
  Parameters: {"app"=>"api/v1/products"}
  Rendered store/index.html.slim within layouts/application (0.0ms)
  Rendered layouts/_navigation_links.html.slim (0.0ms)
  [1m[35mUser Load (0.3ms)[0m  SELECT  `users`.* FROM `users` WHERE `users`.`password_digest` = '$2a$10$FFHrMCASASl8cNMumUC8ZuNwTiZUmoe5i0i.jBW2./.h5iVlNxLZa' LIMIT 1
  Rendered layouts/_navigation.html.slim (2.9ms)
  Rendered layouts/_messages.html.slim (0.1ms)
Completed 200 OK in 154ms (Views: 153.4ms | ActiveRecord: 0.3ms)

You will need to do something like this 您将需要执行以下操作

respond_to do |format|
  format.json { render :json => @products }
end

instead of your respond_with @products 而不是您的respond_with @products

The logs show that HTML is requested: 日志显示请求HTML:

Started GET "/api/v1/products" for ::1 at 2015-11-08 10:16:43 -0600 Processing by StoreController#index as HTML Parameters: {"app"=>"api/v1/products"} 在2015年11月8日10:16:43 -0600开始对:: 1的:: 1进行GET“ / api / v1 / products”,由StoreController#index作为HTML参数进行处理:{“ app” =>“ api / v1 / products”}

try to call for json instead: 尝试改为调用json:

$http.get("/api/v1/products.json")

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM