用Phoenix框架如何 render json 数据?

发布于 2022-09-06 09:52:27 字数 1222 浏览 31 评论 0

用Rails的话可以这样从控制器发送json数据到前端:

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默认的CRUD方式生成的例子,这样:

mix phx.gen.json Accounts User users name:string age:integer
mix ecto.migrate Repo

在控制器中这样传数据:

def show(conn, %{"id" => id}) do
  user = Accounts.get_user!(id)
  render(conn, "show.json", user: user)
end

取json数据也OK:

curl http://localhost:4000/users/2
{"data":{"name":"a","id":2,"age":1}}

但是现在在一种特殊路由情况下,如:

post "/update_item", PostController, :update_item

控制器中这样:

def update_item(conn, %{"user_id" => user_id})
  # ...
  render conn, "update_item.json", user: user
end

不行,提示没有 update_item.json 这个文件,但实际上并不需要这样的文件, show.json 也不存在。
那么这种情况如何能向前端发送json数据呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

浮生未歇 2022-09-13 09:52:27

简单说就是你需要去写 PostView,加一个函数类似:

defmodule MyAppWeb.PostView do
  use HelloWeb, :view

  def render("update_item.json", %{user: user}) do
    # 这里返回你的 JSON
  end
end

详情参考官方文档:https://hexdocs.pm/phoenix/vi...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文