是否在保证发送的锚标签点击处理程序中创建了XHR请求?

时间:2017-07-10 19:05:37

标签: javascript ajax browser xmlhttprequest

我确信这些信息存在,但我的谷歌搜索功能让我失败了。

我想知道的是,如果我在锚标签点击事件处理程序中触发XHR请求,该请求是否保证会被发送?我并不关心处理回复,但我不知道请求是否可以在导航之前永远离开unsent状态。

例如,假设我想跟踪所有锚标记点击,所以我做了类似这样的事情:

$("a").on("click", () => $.ajax({ url: "/track_link_click", method: "POST" });

是否存在事件处理程序中的请求永远不会被发送的情况?我可以阻止位置变化发生,直到收到回复,但我更不愿意。

提前致谢!

1 个答案:

答案 0 :(得分:1)

根据设计,我们无法保证,但在实践中,我非常确定所有浏览器都会至少将请求发送出去。

我建议你研究navigator.sendBeacon(),它是为这种类型的东西而设计的。它的目的是保证请求被发送,即使它必须在页面卸载后发生。 https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon

它在IE中不受支持,但尚未在Safari中支持,因此您需要依赖常规的AJAX方法作为后备。