【发布时间】:2018-08-14 11:47:16
【问题描述】:
我需要提交一些信息,这些信息将在某些客户端操作完成后通过 Javascript 函数自动计算(例如,考虑一个打地鼠游戏,其中需要在时间到时传输和记录分数)。
我有一个合适的模型来记录信息。如果我尝试将信息作为 JSON 发送,则来自控制器的 create 操作运行良好。但是,我似乎无法轻松地重定向用户并在之后显示自定义 Flash 消息。 (我习惯了put_flash 方法,在这种情况下似乎不起作用)。
我是否应该尝试在页面上构建一个隐藏的表单,并尝试填充隐藏的输入字段+在操作完成后通过 JS 触发“提交”按钮?如果不是,如果我通过 JSON POST 请求与控制器交互,执行重定向 + 显示闪存消息的正确方法是什么?我想我还没有完全理解 Flash 消息的机制。
编辑:默认情况下,控制器代码就像:
case Repo.insert(changeset) do
{:ok, record} ->
conn
|> put_flash(:info, "Record saved successfully.")
|> redirect(to: record_path(conn, :index))
...
end
这显然不适用于 JSON 请求。
现在我正在做:
{:ok, lesson_record} ->
conn
|> send_resp(200, "success")
...
并让 Javascript 解析响应代码并进行重定向。但是我不知道在这种情况下如何显示 Flash 消息。
【问题讨论】:
-
您可以显示控制器代码和任何其他适用代码吗?
-
@Bitwise 我认为问题在于我不确定如何编写正确的控制器响应。如果我写
put_flash,然后是redirect,就像在正常的表单提交中一样,包含新页面的文本内容将返回给POST请求,这显然不起作用。我应该使用put_resp_content_type("application/json"),返回带有redirect字段的JSON,然后在Javascript 中手动运行window.location.replace(data.redirect)?在那种情况下,我仍然不确定如何显示闪光灯。
标签: javascript ajax post elixir phoenix-framework