在链接点击上同时发送的AJAX请求的可靠性如何?

时间:2013-06-17 08:29:52

标签: events jquery hyperlink

我们有一个用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请求后立即离开当前页面。

即使浏览器已离开原始页面,是否可以安全地假设请求已完成?

1 个答案:

答案 0 :(得分:0)

实际上,当您点击“a”标签时,浏览器会发送请求,但您的请求完成的可能性很小。有时,请求在不同的Internet速度和服务器上的流量上需要相当长的时间。因此,不建议采用这种方法。

如果在请求完成之前将浏览器重定向到URL,那么它实际请求的可能性为50%。如果在重定向发生之前已经做出请求,那么你的工作就完成了,因为没有必要回复,但如果没有,那么浏览器会放弃该请求并停止响应。

希望这会有所帮助。随意问更多。