【问题标题】:Redirect after Ajax GETAjax GET 后重定向
【发布时间】:2013-04-29 21:45:03
【问题描述】:

在我使用 ajax 执行未授权的 GET 请求后,我试图让我的服务器重定向我的应用程序。但是,当我获得重定向(服务器发送带有 /login.html 位置的 303)时,在查看 firebug 控制台中的“响应”选项卡时,我在响应中获得了 login.html 的完整 HTML(也许这是正常的,我'不确定)。然后在萤火虫中查看它,我看到它正在尝试进行重定向,但控制台只是在执行该操作(从未完成处理它)。我曾尝试在网上查找一些相关信息,但没有成功,我找到的最接近的是:HERE.

这是我在 JavaScript 中的处理方式:

function doSomethingAwesome()
{
  try
  {
     ajaxObject.open("GET", serverLocation+ '?action=getSomeInfo', true);
     ajaxObject.send();
  }
   catch(err){}
}

ajaxObject.onreadystatechange = function()
{
  if(ajaxObject.status == 200 && ajaxUsers.readyState == 4)
  {
    do some stuff
  }
}

我的响应标头包含以下信息: 303 查看其他 连接:保活 日期 位置:/login.html 服务器 nginx/1.2.7 传输编码:分块 所以 onreadystatechange 函数不应该真正影响重定向(据我所知),但我认为我会把它扔在那里。实际上,这里应该发生的所有事情都是我与服务器交谈以加载一些信息,它看到我没有登录(无论是 GET 还是 POST),我应该收到一个重定向到登录页面(这不会'不会发生)。抱歉,如果这听起来很漫无边际,我感谢任何人可以提供的任何建议或帮助。

【问题讨论】:

    标签: javascript html ajax redirect get


    【解决方案1】:

    这里的问题是您只是重定向 ajax 请求,而不是导航到那个新的 url。您必须通过在 onreadystatechange 函数中更改 window.location.href 来执行重定向。

    【讨论】:

    • 这里的想法是,出于安全原因,服务器将强制执行重定向。但是,我确实尝试在 onreadystatechange 函数中手动重定向,但没有任何改变。在萤火虫控制台中,我仍然首先看到我的 GET 请求被发送,然后是一个 GET "http:// stuff/login.html",加载循环不断旋转。对我来说,这看起来它知道它应该重定向,但在某个地方挂断了。
    • @user1005658,做window.location.href = 'someurl'; 肯定会重定向,你确定这条线被执行了吗?如果是,则可能是您遇到了重定向循环。
    • 是的,它肯定会进行重定向。我的问题是浏览器不应该处理 303 重定向吗?还是我必须注意并手动从标题中拉出位置并进行重定向?如果您必须注意 303 并重定向页面,似乎页面不会真正得到保护,任何人都可以设置断点并阻止您的 javascript 运行,但如果是这样,我该如何注意 303?
    • @user1005658,当您执行 Ajax 请求时,该请求会被重定向。浏览器不会重定向主浏览器窗口。如果您希望根据服务器对 ajax 请求的响应进行重定向,那么您必须在 onreadystatechange 处理程序中自行处理。
    • 感谢您回复我。这并不理想,但我可以处理重定向很好。我认为最好的方法是查看标题中是否包含一个位置?或者实际上有没有办法检查我是否收到了 303 回复?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多