我有一张表格供用户输入信息。如果成功添加成功,我想要弹出一条消息(没有页面重定向,就像AJAX调用一样)。问题是出现了Plug.Conn.NotSentError错误
模板:
<%= form_for @changeset, foo_path(@conn, :create), fn f -> %>
<div class="form-group">
<%= text_input f, :email, placeholder: "Email", class: "form-control" %>
</div>
<%= submit "Subscribe!", class: "btn btn-primary" %>
<p><%= get_flash(@conn, :info) %></p>
<% end %>
控制器:
def create(conn, %{"user" => user_params}) do
changeset = User.changeset(%User{}, user_params)
case Repo.insert(changeset) do
{:ok, user} ->
conn
|> put_flash(:info, "Thank you!")
{:error, user} ->
conn
|> put_flash(:info, "An error occurred.")
end
end
答案 0 :(得分:0)
put_flash/3
会向连接添加一条Flash消息。该连接用于回复。在你的情况下,没有答复。您需要某种回复才能将数据(包括Flash消息)传回客户端。
如果您只想将Flash消息附加到当前站点,人们通常会再次呈现相同的内容(通常页面包含表单)。 render conn, :new
另一种可能性是使用ajax或频道来获得更流畅的体验。在ajax的情况下,您可以使用javascript来显示消息。在phoenix中,您可以渲染任何字符串以在控制器中给出适当的响应。所以你要说text conn, "your text, which can be json or not"
。请参阅文档here。
然后,您可以使用jquery显示您的Flash消息并发出请求。检查their doc以了解如何执行此操作。你可能想要使用.done回调。
第三个选项(频道)不是什么东西,我推荐这个任务,除非你有很多这样的形式。