Ajax调用的PHP重定向

PHP redirect from Ajax Call

本文关键字:重定向 PHP 调用 Ajax      更新时间:2023-09-26

我使用Ajax(带有本地JavaScript)和php的组合来构建登录。

from位于一个php文件(login.php)中。当它被提交时,它运行一个JS onlick函数,将表单数据发布到另一个验证表单数据的php文件:

<input type="button" name="submit" value="Submit" onclick="JavaScript:xmlhttpPost('validator.php')"/>

validator.php的结果使用JavaScript:在div中返回

function updatepage(str){
document.getElementById("result").innerHTML = str;
}

最后,如果密码和用户名都正确,validator.php会运行这样的重定向:

if ( // form data is valid ) {
    header("Location: welcome.php");
}

但是,由于所有操作都是通过ajax运行的,这导致"welcome.php"页面显示在原始登录页面的"results"div中。

有没有办法通过JavaScript发送重定向?

我找到了一个可行的解决方案,而不是一个真正有效的答案。我不确定这样做是否正确,但效果很好。

在我的validator.php中,当表单值正确时,我会放入以下内容:

if ( // form data is valid ) {
    echo 'redirect';
}

然后,在我的登录页面上,当从php页面返回字符串时,我放了这个:

function updatepage(str){
   if (str.match(/redirect/)) {
      window.location.replace('welcome.php');
   }
   else {
      document.getElementById("result").innerHTML = str;
   }
}

其想法是,当validator.php确认登录凭据正确时,它会返回一个字符串。

如果该字符串与"重定向"匹配,JavaScript将重定向页面。

如果有人对此有任何意见,请发表评论。我觉得这是一个很好的解决方案。很惊讶我没有早点想到。

您可以使用以下代码通过JavaScript重定向:

window.location.href = 'welcome.php';

当您进行AJAX调用时,您不能通过像PHP这样的服务器端应用程序进行重定向。

你必须得到一个响应,并在你的JavaScript中完成它。

下面是一个使用jQuery和PHP的ajax请求示例。

把这个代码放在你的前端(视图):

<script type="text/javascript">
    $(document).ready(function(){
        $.ajax({
            url: 'your-php-file.php',
            dataType: 'html',
            success: function(response) {
                window.location.href = response;
            }
        });
    });
</script>

https://api.jquery.com/jQuery.ajax/

在你的PHP文件中,在你做了你想要的事情之后;回显要重定向的路径或文件作为响应。

<?php
    echo "file-or-path-to-redirect.php";
window.location.href='welcome.php';

或使用真实路径

window.location.href='http://www.yourdomain.com/welcome.php';

您可以使用窗口对象

window.location.href="http://example.com/welcome.php";

最简单的方法是用json响应来模拟它。然后解析json,看看得到了什么样的响应。这里有一个工作示例:

Index.html

<!DOCTYPE html>
<html>
<head>
<script>
function updatepage(str){
document.getElementById("result").innerHTML = str;
}

function loadXMLDoc()
{
var xmlhttp;
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
      var jsonParse = JSON.parse(xmlhttp.responseText);
      if(jsonParse.redirect){
        window.location.replace(jsonParse.redirect);
      }
      if(jsonParse.success){
        updatePage(success);
      }
    }
  }
xmlhttp.open("GET","login.php",true);
xmlhttp.send();
}
</script>
</head>
<body>
<div id="myDiv"><h2>Let AJAX change this text</h2></div>
<button type="button" onclick="loadXMLDoc()">Change Content</button>
</body>
</html>

login.php

<?php

// if($error)
echo json_encode(array('redirect'=>'welcome.php'));
//else
echo json_encode(array('success'=>'<div>logged in</div>'));
?>