【发布时间】:2022-11-25 03:03:30
【问题描述】:
我在多个 x 数据块内的给定属性上使用 Alpinejs 的 $watch(),以便在该属性发生更改时使用自定义处理程序调用 htmx.ajax。这是一个 sn-p:
HTML:
<div x-data="{profiles:[]}">
<div x-data="..." x-init="$watch('profiles', val=>onProfilesChanged())">...</div>
<div x-data="..." x-init="$watch('profiles', val=>onProfilesChanged())">...</div>
<div x-data="..." x-init="$watch('profiles', val=>onProfilesChanged())">...</div>
<div>
<!-- profiles modified here in response to user input -->
...
</div>
</div>
Java脚本:
function onProfilesChanged() {
htmx.ajax('GET', ..., {'handler': (evt,response)=>{...}});
}
在浏览器中调试我可以看到 onProfilesChanged 按预期被调用(3 次),但只发送了 2 个网络请求,然后回调处理程序只执行了两次。
这些请求似乎对应于第一次和最后一次调用,并且中间的所有内容都以某种方式丢失(尝试了更多$watch()回调)。 Firefox 和 Chromium 的行为相同,所以我怀疑这是浏览器限制,但我在 htmx 文档中找不到任何关于可以排队的最大 Ajax 请求数的内容。
我在这里完全不知所措,将不胜感激任何对可能发生的事情的洞察。谢谢!
编辑:在 for 循环中使用 htmx.ajax() 时也会发生此问题,所以这似乎确实是在 htmx 方面。有一个 hx-sync 标签可以设置 hx-get/post.. 标签的队列行为,但似乎不适用于 JS API。
【问题讨论】:
-
请分享一个重现问题的最小示例。
-
添加了一些示例代码来显示问题
标签: javascript ajax htmx