我们有一个用PHP编写的网上商店。在类别页面上,我们要集成第三方点击跟踪器:每次点击文章时,我们都需要向我们的服务器发送一个AJAX请求,然后该服务器会向第三方跟踪服务器发送REST请求。
所以说我们的产品链接看起来像
<a href="product.php?id=1234" class="product" data-id="123">Product A</a>
为了安全起见,我们会在将浏览器重定向到产品网址之前等待跟踪请求完成。
$('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请求后立即离开当前页面。
即使浏览器已离开原始页面,是否可以安全地假设请求已完成?
答案 0 :(得分:0)
实际上,当您点击“a”标签时,浏览器会发送请求,但您的请求完成的可能性很小。有时,请求在不同的Internet速度和服务器上的流量上需要相当长的时间。因此,不建议采用这种方法。
如果在请求完成之前将浏览器重定向到URL,那么它实际请求的可能性为50%。如果在重定向发生之前已经做出请求,那么你的工作就完成了,因为没有必要回复,但如果没有,那么浏览器会放弃该请求并停止响应。
希望这会有所帮助。随意问更多。