标题(位置:)通过AJAX不重定向

时间:2016-04-02 19:30:12

标签: javascript php ajax redirect http-headers

首先,我要说我知道这似乎不是一个不寻常的问题。我不打算用已经回答过的问题来混淆这些论坛,但是,我已经解决了大约3个线程中存在类似问题,并且无法找到解决方案。

我的问题的简短描述是:我在使用php的标题(位置:)功能提交表单后尝试重定向,并且它没有重定向。它有点复杂,因为表单是通过AJAX提交的。我的代码所经历的步骤如下:

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

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

假设我正朝着正确的方向前进,这可能会出现什么问题?我检查过前导和尾随空格,BOM字符,我甚至尝试过输出缓冲,我仍然遇到同样的问题。

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

有一件事可能有兴趣,也可能没有兴趣,我设置了一个error_log函数,用于在设置Location:标题后立即将所有标题记录到文件中。当我在AJAX(可行)之外重定向时,accept:标头设置为html,但是当我尝试通过AJAX执行时,accept标头设置为JSON。这会导致问题吗?

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

1 个答案:

答案 0 :(得分:0)

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

另一方面,回到PHP的慷慨,总是当我们尝试验证数据服务器端和通过ajax时,我们可以操纵自由工作的部分来显示一些响应消息,重定向到页面上的某个地方或创建会话。无论如何,无论如何。

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

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

请注意,没有必要要求,例如,$('.answer')。html(response);返回一个答案,因为ajax只向服务器发送数据,如果有好的回复消息,如果不好的话。我做的很多次是通过控制台发送消息,虽然这样做通常很方便,因为经常使用几个条件而且取决于我们请求的结果,我们将被迫在某些元素中显示一些响应在我们的代码中。

我建议你的是,你在PHP中使用javascript,因此重定向到其他页面,分配会话或只是返回一条消息。请记住,ajax请求不仅是异步的,而且是重复的,可以根据需要随时发送。你发送了你的ajax调用php文件并且你已经回复了这个事实并不意味着你可以在完成你的ajax请求后回去使用它。

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