我们有一个用 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 请求后立即离开当前页面。
即使浏览器已经离开原始页面,假设请求将完成是否安全?