gpt4 book ai didi

javascript - 在窗口卸载事件上发送发布请求(AJAX 请求与表单提交与图像请求)

转载 作者:行者123 更新时间:2023-11-30 17:20:08 25 4
gpt4 key购买 nike

我正在尝试跟踪我网站上发生的用户事件。一种方法是在每次看到事件时发送一个 ajax 请求。但这会不必要地加载服务器。缓解此问题的一种方法是在卸载事件时批量发送请求(现在我已将阈值设置为 16 个事件)。但问题出现在“unload/beforeunload”事件期间。

以下是我面临的问题:

  • 除非它们是同步的,否则 AJAX 请求不起作用。但是我需要使用异步,因为如果服务器响应缓慢,它的对应项可能会导致问题。 Stack Overflow 中就此事提出的大多数问题都建议您使用“同步”。下面给出了其中一些。
  1. Sending a post Request with Javascript on unload/beforeunload. Is that possible?

  2. Ajax request with JQuery on page unload

  • 我可以使用图像。那么这个方法工作正常(请求被记录)但是它是一个 GET 请求。我需要 POST 请求。

  • 我可以使用将结果加载到隐藏的 iframe 中的表单。这在 Chrome (36.0.1985.125) 上工作正常(记录请求)但在 Firefox (31.0) 上失败。

但是在 Chrome 上我遇到了一个奇怪的问题。也就是说,如果我删除“目标”属性,则不会记录请求。在“unload/beforeunload”事件期间发起请求是否需要“target”属性?

Stack Overflow 的一个回答表明表单提交是异步的。如果是这样,为什么浏览器不像在“卸载/卸载前”事件期间对 AJAX 请求那样取消请求?图像也是同样的问题。

  1. > How to make form submission synchronous?

我使用的测试代码如下。我在 MAC 上使用 XAMPP 服务器。

test.html前端代码。

test.php后端代码。

最佳答案

试试这个技巧:

$.post('log.php', {hello:'world'}, function() {
sleepy.abort();
});

var sleepy = $.ajax({
url: '/sleep.php',
async: false,
});

关于javascript - 在窗口卸载事件上发送发布请求(AJAX 请求与表单提交与图像请求),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25282034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com