使用htmxjs将数据加载到表单中

我正在使用HTMXJS一个 javascript 库,它允许您直接在 HTML 中访问 AJAX。

虽然了解了HTMX的基本逻辑,但还是有一些方面没搞懂。

我设法制作了一个表格并将数据写入服务器:

<form>
    <input type="text" name="firstname">
    <input type="text" name="secondname">

    <button type="button"
        hx-post="write.php"
        hx-target="#container-div"
        hx-swap="innerHTML"> 
        Submit
    </button>
</form>

<div></div>

HTMX 将读取所有name内容并将它们提交到write.php可以使用以下循环读取的位置$_POST

写.php:

foreach ($_POST as $key => $value) {
    echo "Field ".htmlspecialchars($key)." is ".htmlspecialchars($value)."<br>";
}

我不明白如何用服务器返回的数据填充表单。例如,给定以下表单和以下输出,我想INPUT在按下按钮时填充单个字段:

HTML:

<button type="button"
    hx-get="load.php"
    hx-target="#my-form"
    hx-swap="innerHTML">
    Load data
</button>

<form>
    <input type="text" name="firstname">
    <input type="text" name="secondname">
</form>

加载.php:

$a = array(
    "firstname" => "John",
    "secondname" => "Smith",
);

echo json_encode($a);

我知道文档说“当你使用 htmx 时,在服务器端你通常用 HTML 响应,而不是 JSON ”,但这是否意味着服务器输出应该是像这样再次呈现表单所需的整个 HTML 代码?

echo "
    <form>
        <input type="text" name="firstname" value="John">
        <input type="text" name="secondname" value="Smith">
    </form>
";

如果表单有几十个字段、长选择菜单和复杂的复选框组会怎样?会不会是从服务器传递到客户端的大量数据?

我很确定我错过了一些东西......

回答

您的理解是正确的:htmx 会期望您返回要用于填充表单的所有 HTML。

这可能看起来效率低下,但事实证明 HTML 压缩得很好,并且典型的有效负载并不比等效的 JSON 大多少。 这篇博客文章概述了为什么会这样。

此外,即使负载较大,传输时间也常常与连接建立和处理时间相形见绌。htmx 不需要任何客户端模板,因此可以比许多需要的基于 JSON 的 UI 设置快得多。intercooler.js,htmx 的前身,源于我编写的一个小辅助函数,因为我正在处理一个巨大的 JSON 表,而且它需要很长时间。我发现仅仅以 HTML 形式接收表格并将其放入 DOM 的速度要快几个数量级。

说了这么多,我不想驳回你的问题。有几种方法可以在 htmx 中缩小您的有效载荷:

  • 您可以使用hx-target缩小更新到最少 HTML 的区域
  • 您可以使用带外交换来定位要更换的特定项目
  • 推来推去,您可以使用HX-Trigger标头将数据直接传递给 javascript 事件处理程序以填充您的表单

但是,在做任何这些之前,我建议您只尝试无聊、简单的方法,看看性能是否可以接受。我猜答案是肯定的,并且您会发现,无论通过更复杂的解决方案可能实现的任何小的性能提升,减少的维护负担都是值得的。


以上是使用htmxjs将数据加载到表单中的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>