从php文件重定向到html

时间:2017-06-11 11:46:45

标签: php redirect

这是我的php代码。我需要在if($users[$name] === $password)$users[$name] = $password;时重定向到另一个页面,但它不起作用。出了什么问题?这里也是ajax。



$(document).ready(function() {
  $('#submit').click(function() {
    var name = $('#username').val();
    var password = $('#password').val();
    $.ajax({
      type: 'POST',
      url: 'php/login_script.php',
      data: {
        user: name,
        pass: password
      },
      success: function(a) {
        alert(a);
      }
    });
  });
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

<?php
if(!isset($_POST['user'])||!isset($_POST['pass'])){
    die();
}
$file = "users.json";
$users = json_decode(file_get_contents($file), true);
$name = $_POST['user'];
$password = $_POST['pass'];

if(isset($users[$name])) {
    if($users[$name] === $password){
        header("Location:chat.html");
        exit;
    }
    else {
        echo "Wrong password";
    }
} 
else {
    $users[$name] = $password;
    file_put_contents($file, json_encode($users, JSON_PRETTY_PRINT));
    header("Location:chat.html");
    exit;
}

2 个答案:

答案 0 :(得分:0)

因为您使用ajax获取页面,重定向将发生在ajax请求中,这意味着您将收到301响应。

这应该有效:

$(document).ready(function() {
  $('#submit').click(function() {
    var name = $('#username').val();
    var password = $('#password').val();
    $.ajax({
      type: 'POST',
      url: 'php/login_script.php',
      data: {
        user: name,
        pass: password
      },
      success: function(a) {
        document.location = 'chat.html';
      },
      error: function() {
        alert('Invalid password');
      }
    });
  });
});

<?php
if(!isset($_POST['user'], $_POST['pass']) || empty($_POST['user']) || empty($_POST['pass'])){
    // Send bad request so redirect doesn't happen
    http_response_code(400);
    die();
}
$file = "users.json";
$users = json_decode(file_get_contents($file), true);
$name = $_POST['user'];
$password = $_POST['pass'];

if(isset($users[$name])) {
    if($users[$name] != $password){
        http_response_code(400);
        echo "Wrong password";
    }
} 
else {
    $users[$name] = $password;
    file_put_contents($file, json_encode($users, JSON_PRETTY_PRINT));
}

这将在成功时返回200,在失败时返回400,这将触发success请求的error$.ajax部分。

答案 1 :(得分:0)

你需要认识到的关于PHP的所有事情都是在将页面发送给用户之前完成的,所以在php/login_script.php上调用重定向什么都不做。

您需要做的是返回一些内容以表明登录成功。

这是你应该做些什么来理解我的解释:

  1. header("Location:chat.html");替换为PHP代码中的echo "success";
  2. 将您的jQuery更改为以下内容:

    success: function(a) { if (a === "success") { window.location.replace("chat.html"); } }