过去几天我一直在努力解决这个问题。事实上,由于我是所有这一切的新手,似乎我一直在努力想出办法。无论如何,关于我的问题。
我正在尝试使用以下代码在PHP中对数组进行编码并使用JSON在JQuery中检索它:
'core / init.php'中包含的功能:
function output_errors($errors) {
echo json_encode($errors);
}
的login.php:
<?php
include 'core/init.php';
logged_in_redirect();
if (empty($_POST) === false) {
$username = $_POST['username'];
$password = $_POST['password'];
if (empty($username) === true || empty($password) === true) {
$errors[] = 'Please enter a username and password.';
} else if (user_exists($username) === false) {
$errors[] = 'We can\'t find that username. Have you registered?';
} else if (user_active($username) === false) {
$errors[] = 'You haven\'t activated your account.';
} else {
$login = login($username, $password);
if ($login === false) {
$errors[] = 'That username/password combination is incorrect.';
}
else {
//start session
$_SESSION['user_id'] = $login;
//redirect to home.
header('Location: index.php');
exit();
}
}
} else {
header('Location: index.php');
}
include 'includes/overall/header.php';
if (empty($errors) === false) {
?>
<h2>We tried to log you in but...</h2>
<?php
output_errors($errors);
}
include 'includes/overall/footer.php';
?>
JQuery的:
function logErrors(errors) {
alert(errors);
};
$(document).ready(function() {
$.getJSON('login.php', function(errors){
logErrors(errors);
});
});
我在本地工作并且已经让它来处理测试文件:
test.php的:
<?php
function output_errors($errors) {
echo json_encode($errors);
}
output_errors($errors);
?>
在我的一些研究中,我发现PHP的版本可能是一个问题。这似乎不是我的问题,因为我已经让它与另一个文件一起工作。
其他人似乎遇到的另一个常见问题是$ .getJSON是异步的,并且可能在php有机会返回数组之前运行。我不确定我的JQuery是否结构正确或不能避免这个问题。
我一直得到的是没有警报,错误回应如下:[“我们找不到该用户名。你注册了吗?”]。
如何让我的JQuery检索编码数组并触发函数logErrors?
提前感谢您提供的任何帮助。对不起,如果我发布的代码太多或者不够......新手的错误。
更新
以下是user_exists和user_active函数:
user_exists:
function user_exists($username) {
$username = sanitize($username);
$query = mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username'");
return (mysql_result($query,0) == 1) ? true : false;
}
user_active:
function user_active($username) {
$username = sanitize($username);
$query = mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username'AND `active` = 1");
return (mysql_result($query,0) == 1) ? true : false;
}
电子
答案 0 :(得分:1)
您的问题可能需要在返回json对象之前设置标头
function output_errors($errors) {
header('Content-Type: application/json');
echo json_encode($errors);
}
答案 1 :(得分:0)
最后,想通了。事实证明,bozdoz和DCoder是正确的。我没有意识到php会回显整个页面(菜鸟错误)。我的印象是它只会回显json_encoded数组。
对于遇到类似问题的任何人,请确保您使用的文件只能回显所需的结果。
感谢帮助男士和女士。