【问题标题】:How reliable is an AJAX request that is sent simultaneously on a link click?单击链接时同时发送的 AJAX 请求的可靠性如何?
【发布时间】: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 帖子行之外(不等待它完成)。这样,它必须先开火。
  • 谢谢,我会更新问题。但我仍然想知道,如果该请求真的完成了,即使浏览器已经加载了新页面。

标签: events jquery hyperlink


【解决方案1】:

其实当你点击“a”标签时,浏览器会发送请求,但是你的请求完成的概率很低。有时,请求在不同的互联网速度和服务器上的流量上需要相当长的时间。所以强烈不建议采用这种方法。

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

希望这会有所帮助。欢迎询问更多。

【讨论】:

    猜你喜欢
    • 2014-04-27
    • 2014-05-05
    • 2015-10-27
    • 2012-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    相关资源
    最近更新 更多