这是我的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;
<?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;
}
答案 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
上调用重定向什么都不做。
您需要做的是返回一些内容以表明登录成功。
这是你应该做些什么来理解我的解释:
header("Location:chat.html");
替换为PHP代码中的echo "success";
。将您的jQuery更改为以下内容:
success: function(a)
{
if (a === "success")
{
window.location.replace("chat.html");
}
}