Phoenix 框架:通过 JSON 或隐藏表单提交自定义信息?

Phoenix framework: Submission of custom information via JSON or hidden form?

我需要提交一些信息,这些信息将在某些客户端操作完成后通过 Javascript 函数自动计算(例如,考虑需要传输分数的打地鼠游戏和到时间记录)。

我有一个合适的模型来记录信息。如果我尝试将信息作为 JSON 发送,来自控制器的 create 操作运行良好。但是,我似乎无法轻松重定向用户并在之后显示自定义的 flash 消息。 (我习惯了 put_flash 方法,但在这种情况下似乎不起作用)。

我是否应该尝试在页面上构建一个隐藏的表单,并在操作完成后尝试填充隐藏的输入字段+通过 JS 触发 "Submit" 按钮?如果不是,如果我通过 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 消息并将用户重定向到 http 无论如何,你为什么要在第一个 JSON POST 开始地方?这看起来像一个普通的 HTTP POST.

虽然不需要构造隐藏表单,只需将内容类型设置为 application/x-www-form-urlencoded 并构造请求,如:

  const data = [
    encodeURIComponent(key1) + "=" + encodeURIComponent(value1),
    encodeURIComponent(key2) + "=" + encodeURIComponent(value2)
  ].join("&");
  const request = {
    method: 'POST',
    url: url,
    headers: {'Content-Type': 'application/x-www-form-urlencoded'},
    data: data
  };
  post_it(request);

对于这种类型的请求,您的所有重定向、即显消息等都将完美运行,因为它是一个普通的 HTTP POST,它通过各自的 默认管道