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

Javascript Phoenix框架:通过JSON或隐藏表单提交自定义信息?,javascript,ajax,post,elixir,phoenix-framework,Javascript,Ajax,Post,Elixir,Phoenix Framework,我需要提交一些信息,在一些客户端操作完成后,这些信息将通过Javascript函数自动计算(例如,想象一下一个打鼹鼠游戏,游戏结束后需要传输和记录分数) 我有一个合适的模型来记录信息。如果我尝试将信息作为JSON发送,那么来自控制器的create操作运行良好。但是,我似乎无法轻松重定向用户并在事后显示自定义flash消息。(我习惯了put\u flash方法,在这种情况下似乎不起作用) 我是否应该尝试在页面上构建一个隐藏表单,并尝试填充隐藏的输入字段,并在操作完成后通过JS触发“提交”按钮?如果

我需要提交一些信息,在一些客户端操作完成后,这些信息将通过Javascript函数自动计算(例如,想象一下一个打鼹鼠游戏,游戏结束后需要传输和记录分数)

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

我是否应该尝试在页面上构建一个隐藏表单,并尝试填充隐藏的输入字段,并在操作完成后通过JS触发“提交”按钮?如果不是,如果我通过JSON POST请求与控制器交互,那么执行重定向+显示flash消息的正确方法是什么?我想我并没有完全理解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消息。

如果您想显示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);

对于这种类型的请求,您的所有重定向、flash消息等都将完美工作,因为这是一个正常的HTTP POST,通过各自的默认管道。

您是否有可能显示控制器代码和任何其他适用代码?@按位我想问题在于我不确定如何编写正确的控制器响应。如果我写
put\u flash
,然后再写
redirect
,就像正常表单提交一样,包含新页面的文本内容会返回到POST请求,这显然不起作用。我应该使用
put\u resp\u content\u type(“application/json”)
,返回带有
redirect
字段的json,然后在Javascript中手动运行
window.location.replace(data.redirect)
?在这种情况下,我仍然不知道如何显示闪光灯。谢谢。我最终决定使用JSON进行模式弹出,但如果我想坚持使用redirect+flash,这正是需要的。