我有一个嵌入在随机站点中的 js 小部件。
当用户单击链接时,我想将其报告给我的服务器。
为了调用我的服务器,我使用 src 动态创建一个标签,其中包含报告给服务器的参数。
如果我在 onclick 事件上执行此操作并从 onclick 返回 true,服务器可能不会收到调用,因为浏览器更改了页面(这是正确的吗?)。
如果我在 onclick 上执行此操作并返回 false,然后在返回对服务器的调用后使用重定向,我将失去后退按钮功能,因为 IE 等浏览器不支持重定向后的后退按钮。
知道如何以稳健的方式做到这一点吗?
最佳答案
没问题。如果将 onclick 处理程序添加到 <a>
将 AJAX POST 发送到服务器(注册点击)的元素,这将到达服务器,页面仍将移至单击的链接,并且后退按钮将按预期工作。
jQuery 示例:
$('a').live('click', function () {
$.post('/registerclick/', { data: $(this).attr('src') }, function () {});
});
之所以有效,是因为 HTML 中的客户端/服务器模型指定,当请求发送到服务器时,无法取消。因此以下规则适用:
- 事件处理程序关闭,并向服务器发送请求
- 默认浏览器行为会将用户重定向到
href
中的页面属性 - 即使用户位于完全不同的页面,服务器也会收到请求
浏览器不知道第三步;但这对服务器来说并不重要。
关于javascript - JS : How to track click on links without losing the back button,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7330576/