【问题标题】:How can I send an ajax request and redirect to another page如何发送 ajax 请求并重定向到另一个页面
【发布时间】:2012-07-28 07:01:08
【问题描述】:

我在我的客户端代码中看到了以下序列:

$.ajax({
    url: "...",
    data: {},
    success: function() {
    // I don't care about the response
    }
});

top.location.href="http://...." 

如您所见,浏览器发送一个 ajax 请求,并不关心响应。 在它发送请求后,页面将使用top.location.href 语句重定向到另一个 url。

我是javascript新手,不知道ajax请求是否保证发送?

是否有另一种方法来获得这种发送、忘记和重定向 ajax 行为?

编辑:

澄清一下,我不想等待这个 ajax 完成它的长时间操作并将重定向行放在成功回调中。

【问题讨论】:

  • 我说的是客户端,难道ajax函数会在浏览器上排队,而top.location.href会在它之前运行?
  • 这就是为什么,如果你不希望它在你的ajax请求之前运行,把它放在ajax的成功或完成参数中。

标签: javascript jquery ajax


【解决方案1】:

如果您想 100% 确定消息已被接收和处理,您应该在 success 处理程序中进行重定向。

这还可以让您在需要时进行错误处理 - 例如,如果您发出 AJAX 请求但由于某种原因失败了怎么办?如果你只是重定向用户永远不会知道有问题。但是,根据您的应用程序的具体情况,您可能不需要关心这一点。

【讨论】:

  • 问题是,如果您在请求到达服务器之前重定向,那么它可能会丢失。因此,至少我会建议发出 AJAX 请求,然后使用 setTimeout 等待一秒钟左右,然后再进行重定向。但这很容易出错,因为您仍然依赖于时间 - 如果您的请求需要更长的时间才能将其返回服务器怎么办?更好的方法是修改您的服务器处理程序以立即返回并将作业排队以在服务器上运行以完成长时间运行的任务。然后您仍然可以在客户端上使用 success 处理程序。这有帮助吗?
  • +1 这听起来是最合理的做法,我一直在寻找一个简短的答案,比如“它会起作用”。在某个地方我知道我不会得到它:) 谢谢!!!
【解决方案2】:

如果您只想在 ajax 请求成功后重定向到其他页面,那么为什么不将您的 top.location 放入成功函数中,或者如果您只想重定向,无论您的 ajax 是否成功...写上您的顶部.location 在一个完整参数的函数中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-27
    • 2011-03-01
    • 1970-01-01
    • 2012-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多