0

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

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

4

1 回答 1

0

实际上,当您单击“a”标签时,浏览器会发送请求,但您的请求完成的可能性非常低。有时,请求在不同的互联网速度和服务器上的流量上需要相当长的时间。所以强烈不建议采用这种方法。

如果浏览器在请求完成之前被重定向到一个 URL,那么它有 50% 的机会实际向服务器发出了请求。如果在重定向发生之前已经发出请求,那么您的工作就完成了,因为不需要响应,但如果没有,那么浏览器会丢弃该请求并停止它。

希望这可以帮助。随时问更多。

于 2013-06-17T08:41:53.553 回答