【发布时间】:2009-09-22 22:15:00
【问题描述】:
我有一个带有表单的网页。当用户提交表单时,我希望服务器使浏览器重定向到与表单操作不同的页面。现在,我正在通过使用 PHP 的 header 函数发送 302 状态代码来执行此操作。它工作正常。
我试图使服务器上的页面以相同的方式重定向浏览器,无论它是正常提交(没有 Javascript)还是通过 Ajax。我试图通过将窗口位置设置为 Location 标头中的任何 URL 来做到这一点。我正在使用 jQuery,并进行如下调用:
$.ajax({
url: this.action,
type: "POST",
data: getFormData(this),
complete: function(request) {
window.location.assign(request.getResponseHeader("Location"));
}
});
然而,这并没有奏效。想了想,才发现这并不奇怪。在 Ajax 请求中,浏览器应该在更改 readyState 之前透明地处理重定向响应,例如 302 代码。当完整的函数运行时,它正在寻找最终目的地的 Location 标头,但没有找到。
作为实验,然后我尝试发送带有 Location 标头的 200 状态代码。我尝试了 Ajax 请求,它运行良好。但是,当我进行非 Ajax 提交时,它不起作用。浏览器转到表单操作页面并停留在那里,就像它忽略了 Location 标头一样。
有没有办法在这两种情况下重定向相同的页面,而服务器不必知道或关心请求是否是 Ajax 请求?
如果这很重要,我在各种浏览器(IE8、IE7、IE6、Firefox 3.5、Chrome)中尝试了表单,每次都得到类似的结果。另外,我正在做一个发布请求以避免碰到 IE 的 2083 个字符的 URL 长度限制。
【问题讨论】:
标签: php javascript jquery html ajax