Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过AJAX的标头(位置:)未重定向_Javascript_Php_Ajax_Redirect_Http Headers - Fatal编程技术网

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

Javascript 通过AJAX的标头(位置:)未重定向,javascript,php,ajax,redirect,http-headers,Javascript,Php,Ajax,Redirect,Http Headers,首先,让我说,我知道这似乎不是一个罕见的问题。我不打算用已经回答过的问题把这些论坛弄得一团糟,但是,我已经处理了大约30多个类似问题的线程,并且一直无法找到解决方案 对我的问题的简短描述是:我试图在使用php的header(location:)函数提交表单后重定向,但它没有重定向。这有点复杂,因为表单是通过AJAX提交的。我的代码所经历的步骤如下: 用户提交表单>通过AJAX发送的表单数据>表单处理页面验证数据>如果有效,表单处理页面将数据插入数据库>如果提交成功,表单处理页面将重定向URL添加

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

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

用户提交表单>通过AJAX发送的表单数据>表单处理页面验证数据>如果有效,表单处理页面将数据插入数据库>如果提交成功,表单处理页面将重定向URL添加到$\u会话>表单处理页面返回“重定向”变量>javascript/AJAX检查重定向变量,如果找到,则刷新页面>页面标题检查$\u会话中的重定向URL,如果找到,则设置适当的标题和出口

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

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

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

有一件事可能有趣,也可能不有趣,我设置了一个error_log函数,在设置位置:header之后立即将所有头记录到一个文件中。当我在AJAX之外重定向时(这是可行的),accept:header被设置为html,但是当我试图通过AJAX重定向时,accept头被设置为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请求后继续使用它


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

窗口。位置
与在标题中发送位置一样好。无论哪种方式,您都无法控制客户机的实际操作。只有在使用ajax时,才能通过PHP更改原始页面的位置。使用JS或不使用ajax。