【问题标题】:Posting data to server async just before page redirect在页面重定向之前将数据异步发布到服务器
【发布时间】:2014-01-13 16:56:07
【问题描述】:

这似乎是一个常见问题,但我找不到相关主题 - 如果我在这里遗漏了什么,请指导我。

我们正在对我们的网站使用某种点击跟踪器。 当用户单击链接时,此跟踪器会收到调用,我们希望将某些数据填充到不同的服务器,并让用户继续访问单击的 url。

因为我不想在这里等待服务器响应——我不想等待对这个 ajax 调用的响应。 但发生的事情是我失去了这个电话,它永远不会到达服务器。 执行此操作的正确方法是什么?

我正在使用 top.window.location.href = url;因为我有时会在 iframe 中打开。

function onClick(url, clickedFrom) {
        var testClick = ServerHost + "click";
        var dataObject = buildCommonData();

        $.ajax({
            dataType: 'post',
            contentType: "text/json; charset=utf-8",
            data: dataObject,
            url: testClick,
            async: true,
            success: function (response) {
                top.window.location.href = url;

            },

        });
        top.window.location.href = url;

        return false;
    }

【问题讨论】:

  • 您需要等待响应才能卸载页面。
  • $.ajax() 调用没有足够的时间调用服务器,因为第二个 top.window.location.href 调用 @Kiran。但是是的@briler,如果你必须确保跟踪器被触发,你确实需要等待。
  • @digitalextremist ajax 调用已经被放置,但是回调不会被执行,因为他正在重定向。
  • @Kiran ... OP 说:发生的情况是我失去了这个电话,它永远不会到达服务器 ...这与响应或回调无关。 .. 第二个重定向(在success: 块之外)正在破坏调用。
  • 您应该在成功、失败和错误块上使用top.window.location.href = testClick;。我认为testClick 更好。删除返回前的最后一个重定向。

标签: javascript html web


【解决方案1】:

删除第二个top.window.location.href = url; ...,它正在破坏您的$.ajax() 呼叫...并且永远无法到达return false


考虑在$.ajax() 调用中使用setTimeout success:

您可以在这里加倍您的方法,并保留第二个 top.window.location.href 调用,但将其放在 setTimeout 块中,以防出现 $.ajax() 延迟。

这样,$.ajax() 调用应该首先发生,但如果不是,至少当服务器故障挂断$.ajax() 调用时,用户不会被延迟。

【讨论】:

  • 我想过超时——但我不想让用户在这里等待。
  • 为你更新了我的答案。
  • 谢谢,我最终得到了关于 ajax 成功和失败的 top.window.location.href = url,还添加了超时属性。因为我不想让用户等待太久。删除了超出 ajax 范围的 top.window.location.href = url,因为它没有发送 ajax 调用。感谢您的帮助。
猜你喜欢
  • 2017-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-17
  • 2016-06-20
  • 2016-03-14
  • 1970-01-01
  • 2014-11-23
相关资源
最近更新 更多