如何用Phoenix框架渲染json?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用Phoenix框架渲染json?相关的知识,希望对你有一定的参考价值。

如果使用带有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那样将数据发送回前端吗?

答案

有可能的。你有很多步骤...首先,你的路由器需要管道请求,所以它接受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是db上的集合名称

其他args类似于轨道发生器我猜

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

你也可以在github上查看我的简单todo-list凤凰回购,这样你就可以看到基础知识TodoApp example(它非常沉闷的tho)

以上是关于如何用Phoenix框架渲染json?的主要内容,如果未能解决你的问题,请参考以下文章

如何用模板渲染后台返回不确定的data

java web二进制流的图片如何用response返回给前台

如何用 ViewPager 中的另一个片段替换 Android 片段?

如何用python+selenium+phantomjs获得一个网页的动态生成的html代码

Android NavController:如何用相同的动作打开相同的片段

如何用OpenGL ES 2.0渲染一个透明surface