标头(位置:)通过AJAX未重定向

header(Location:) via AJAX not redirecting

本文关键字:AJAX 重定向 通过 位置 标头      更新时间:2023-12-11

首先,让我说,我知道这似乎不是一个罕见的问题。我不打算在这些论坛上塞满已经回答过的问题,但是,我已经处理了大约30多个类似问题的线程,但一直无法找到解决方案。

对我的问题的简短描述是:我试图在使用php的header(location:)函数提交表单后重定向,但它没有重定向。这有点复杂,因为表单是通过AJAX提交的。我的代码经过的步骤如下:

用户提交表单>通过AJAX发送的表单数据>表单处理页面验证数据>如果有效,表单处理页面将数据插入数据库>如果提交成功,表单处理页将重定向URL添加到$_SESSION>表单处理页返回一个"重定向"变量>javascript/AAJAX检查重定向变量,并刷新页面(如果找到)>页头检查$_SESSION的重定向URL,如果找到,则设置适当的页头并退出。

我想我想问的第一件事是,这是正确的做法吗?在我看来,应该有一种更简单的方法来做这件事。显然,将重定向URL传递给javascript并执行window.location重定向要简单得多,但我读到在服务器端处理它会更好/更安全,所以我正在尝试这样做。

假设我朝着正确的方向去做,这里会出什么问题?我检查了前导和尾随空格、BOM字符,甚至尝试了输出缓冲,但仍然存在同样的问题。

表单提交时会发生的情况是,页面会刷新,但它会返回到原始表单页面,而不是重定向url。我打开了最详细的错误报告,没有任何错误。

有一件事可能感兴趣,也可能不感兴趣,我设置了一个error_log函数,在设置Location:标头后立即将所有标头记录到一个文件中。当我在AJAX之外重定向时(这是有效的),accept:header被设置为html,但当我尝试通过AJAX进行重定向时,accept-header被设为JSON。这会造成问题吗?

非常感谢您抽出时间,如果这是一个愚蠢的问题,请再次道歉。我已经使用这个论坛很多年了,从来没有在上面发布过问题,因为直到现在它总能解决我的问题。提前感谢!

PHP太慷慨了,不仅不能在代码中包含HTML代码,还不能在您的代码中包含JavaScript代码。我会解释一件事。当您通过ajax发送数据时,通常很难返回布尔数据(无论是真是假,取决于我们在服务器端使用php在我们的ajax方向上建立的一些文件中工作的条件)来给出最终答案。

另一方面,回到PHP的慷慨,当我们试图在服务器端和通过ajax验证数据时,我们可以自由地操作工作部分,以显示一些响应消息、重定向到页面上的某个位置或创建会话。不管怎样。

我的意思是,在您将使用AJAX的控制器部分,您可以设置不同的条件。也就是说,如果用户数据是正确的,那么你可以发送调用Javascript中的脚本,用location.reload()重定向他;并且还自动分配会话。如果用户没有正确的数据,那么我们应该做的是向退出AJAX返回一条警告消息或警报,通常它会在:之后

function (response) {
$ ('.answer').html(response);
}

请注意,例如,不需要$('.answer').html(response);返回一个答案,因为ajax只向服务器发送数据,如果有回复消息,则发送良好,如果没有。很多时候,我所做的是通过控制台发送消息,尽管这样做通常很方便,因为通常在几个条件下工作,这取决于我们的请求结果,我们将被迫在代码中的某个元素中显示一些响应。

我建议您在PHP中使用javascript,从而重定向到其他页面、分配会话或简单地返回消息。请记住,ajax请求不仅是异步的,而且是重复的,可以根据需要随时发送给调用方。事实上,您发送了ajax调用php文件并返回了答案,这并不意味着您可以在完成ajax请求后继续使用它。

这是做你想做的事情的正确方式,在客户端操作我们的服务器端代码通常更容易。问候。