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,它通过各自的 默认管道 。
我需要提交一些信息,这些信息将在某些客户端操作完成后通过 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,它通过各自的 默认管道 。