【发布时间】:2013-06-17 08:29:52
【问题描述】:
我们有一个用 PHP 编写的网上商店。在一个类别页面上,我们想要集成一个 3rd 方点击跟踪器:每次文章被点击时,我们需要向我们的服务器发送一个 AJAX 请求,该服务器又会向 3rd 方跟踪服务器发送一个 REST 请求。
所以说我们的产品链接看起来像
<a href="product.php?id=1234" class="product" data-id="123">Product A</a>
为了安全起见,我们将等待跟踪请求完成,然后将浏览器重定向到产品 URL。
$('a.product').on('click',function(e) {
e.preventDefault();
var a = $(this);
$.getJSON(trackingUrl, {id:a.data('id')}, function(d) {
window.location.href = a.attr('href');
});
});
这有一个明显的缺点,即在点击产品后会有延迟,因为浏览器必须等待 AJAX 请求完成。
所以我们考虑了一种即发即弃的方法,我们不等待 AJAX 请求的响应:
$('a.product').on('click',function(e) {
e.preventDefault();
var a = $(this);
$.getJSON(trackingUrl, {id:a.data('id')});
window.location.href = a.attr('href');
});
我们在这里不等待成功响应,希望浏览器无论如何都会完成我们的请求,即使我们在发送 AJAX 请求后立即离开当前页面。
是否可以假设即使浏览器已经离开原始页面,请求也会完成?
【问题讨论】:
-
为什么不直接调用
e.preventDefault()使用您的第一个示例,而是将重定向移到 AJAX 帖子行之外(不等待它完成)。这样,它必须先开火。 -
谢谢,我会更新问题。但我仍然想知道,如果该请求真的完成了,即使浏览器已经加载了新页面。