Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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 PHP重定向:标题,但使用AJAX_Javascript_Php_Ajax - Fatal编程技术网

Javascript PHP重定向:标题,但使用AJAX

Javascript PHP重定向:标题,但使用AJAX,javascript,php,ajax,Javascript,Php,Ajax,我目前编写的一个PHP脚本使用redirect:header将您移动到下一页 这是一个登录表单,如果成功,则需要注册-succes.php。如果不成功(没有正确填写),它会在会话中存储一条错误消息,并将您重新加载到register-form.php中重试 最初,它工作得非常好,因为所有独立的页面(比如register-success.php)都是它自己的完整HTML页面 但后来我对它进行了更改,使您保持在同一页面上,并通过AJAX加载主div。这意味着使用重定向不再有效 目前,这是表单的成功重定

我目前编写的一个PHP脚本使用redirect:header将您移动到下一页

这是一个登录表单,如果成功,则需要注册-succes.php。如果不成功(没有正确填写),它会在会话中存储一条错误消息,并将您重新加载到register-form.php中重试

最初,它工作得非常好,因为所有独立的页面(比如register-success.php)都是它自己的完整HTML页面

但后来我对它进行了更改,使您保持在同一页面上,并通过AJAX加载主div。这意味着使用重定向不再有效

目前,这是表单的成功重定向:

if(register($email_address, $username, $password) === true){

        // Sends an email
        send_email($email_address);

        $succeeded = true;

        header("Location: register-success.php?username=$username");
        exit;
    }
除了简单的重定向之外,我如何通过AJAX重新加载register-succes.php,类似于下面的内容,但使用php

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)
    {
    document.getElementById("login-register-wrapper").innerHTML=xmlhttp.responseText;
    }
  }

xmlhttp.open("GET","register-success.php",true);
xmlhttp.send();

您可以通过修改来在JavaScript中执行重定向。例如,使用此JSON作为返回值:

{
   "Location": "http://example.com"
}
如果JSON中存在
Location
,则重定向。

register.php

<?php 
 $succeeded = false;
 if(isset($_POST['btn']))
    {
      $username=$_POST['username']; // etc.
      if( $username=="abc"){

            // Sends an email
            //send_email($email_address);

            $succeeded = true;

           // header("Location: register-success.php?username=$username");
           // exit;  
        }
    }

?>
<!DOCTYPE html>
<html class="no-js">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title>PHP Test</title>
        <meta name="description" content="">
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <!-- Place favicon.ico and apple-touch-icon(s) in the root directory -->

    </head>
    <body>
        <form action="" method="post">
            <input type="text" name="username" placeholder="Username"/>         
            <input type="submit" name="btn" value="Register">
        </form>
        <div class="result"></div>

        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
        <?php if($succeeded){ ?>

        <script>
        $.post( "register-success.php?username=<?php echo $username;?>", function( data ) {
          $( ".result" ).html( data );
        });
        </script>

        <?php } ?>
    </body>
</html>

PHP测试
$.post(“register success.php?username=”,函数(数据){
$(“.result”).html(数据);
});
register-success.php

<?php 
if(isset($_GET['username']))
{ 
    ?>

<div>
    <h1>Welcome <?php echo $_GET['username'];?></h1>
</div>
<?php } ?>

欢迎

为什么您需要重定向,您不能在成功登录时将成功页面包含在登录脚本中吗?这样,你只刷新你想刷新的页面部分,这就是为什么你首先要使用ajax。@jereon这听起来像是我想要实现的,我想用ajax刷新替换重定向,正如我上面所问的。因此,不是重定向,直接包含该文件,其内容将在ajax调用中返回(并显示在
#登录注册包装器
)。目前我在页面中没有ajax调用,我只是将其用作我希望执行的示例。您能提供一个使用我已经包含的PHP的代码示例吗?很抱歉,我正在寻找我可以实现的建议,因为我不知道如何用PHP编写。那么,在OP中发布的成功声明中,这会是什么呢?我的理解是,您不能将javascript添加到PHP中?这是完整注册脚本@Francesca Use
echo json_encode(['Location'=>'My Location'])的粘贴库
然后
JSON.parse
用JavaScript和
window.location=JSON.location
解析响应。您能提供一个上面代码的示例吗?echo语句是否在PHP中使用?JS在函数中的位置是什么?调用的函数在哪里?@Francesca
echo
位于
标题('Location:…')
所在的位置。当
xmlhttp.readyState
为4且状态为
200
时,JS进入
onreadystatechange
。好的,但目前页面上没有JS。我把它作为一个例子放在页面中。那么AJAX函数是如何调用的呢?这不起作用。首先,它删除了我已有的大部分代码,这些代码会导致其他领域的失败。我如何简单地用AJAX刷新替换标题位置呢?问题是,您不能。请看,PHP是服务器端,无法与Javascipt通信。您可能想深入了解一些php ajax,所以完全不可能刷新使用ajax的页面?它必须指向一个新页面。。。你是这么说的吗?使用PHP绝对没有办法只更新页面的一部分?如果您只想更新页面的一部分,您可以这样做。我只在第二种方法中解释了这一点。我已经实现了上面的代码,但它不起作用。