【问题标题】:How to render json with Phoenix framework?如何使用 Phoenix 框架渲染 json?
【发布时间】:2017-12-29 03:16:32
【问题描述】:

如果使用带有ajax请求的Rails框架,控制器中的这种方式可以将数据发送回前端:

def get_posts
  @posts = Post.where(user_id: params[:user_id].to_i)
  if request.xhr?
    render :json => {
      :posts => @posts
    }
  end
end

前端可以抓到:

$.ajax({
  type: "GET",
  url: "<%= get_post_path %>",
  data: {user_id: $("#user_id").val()},
  success: function(data, textStatus, xhr) {
    alert(data.posts);
    //...
  }

那么在Phoenix框架中,如何将数据发回前端呢?

我从官方文档中看到了这个指南:

https://hexdocs.pm/phoenix/views.html#rendering-json

它的方法是使用render("page.json", %{page: page})发送数据,但我不想创建一个json文件。

那么是否可以像 Rails 那样将数据发送回前端?

【问题讨论】:

  • 为什么-1 没有任何评论?我认为这是一个公平的问题

标签: ruby-on-rails json ajax xmlhttprequest phoenix-framework


【解决方案1】:

这是可能的。虽然你有很多步骤...... 首先,您的路由器需要对请求进行管道传输,以便它接受 json。像这样的:

  pipeline :api do
    plug :accepts, ["json"]
  end

  scope "/api", TodoWithAuthWeb do
    pipe_through :api

    resources "/posts", PostController, except: [:new, :edit]
  end

然后您的控制器操作应该将 .json 视图呈现为

render(conn, "show.json", post: post)

这个show.json 视图会是这样的

  def render("show.json", %{post: post}) do
    %{data: render_one(post, PostView, "post.json")}
  end

  def render("post.json", %{post: post}) do
    %{id: post.id,
      title: post.title}
  end

或者类似的东西。 您可以只使用 phx 工具为您生成整个资源...例如,生成用户/控制器/视图/等

mix phx.gen.json Authentication User users email:string encrypted_password:string

Authentication 是“包”名称

User 是您在代码库中的型号名称

users 是您在数据库中的集合名称

其他 args 类似于我猜的 rails 生成器

网上有一些指南如Building a Trello copy with Phoenix and React

你也可以在 github 上查看我的简单 todo-list phoenix repo,这样你就可以看到基础知识 TodoApp example(它很无聊)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多