我有Jquery代码
$(document).ready(function(){
$('#login').click(
function () {
$.post('/profile/ajax/login', {
username: $('#username').val(),
password: $('#password').val(),
},
function (res) {
if (res != null) {
$.each(res, function (i, val) {
$('#login-error').html('<div class="alert alert-danger fade in"><a class="close" data-dismiss="alert" href="#">×</a>' + val + '!</div>');
return false;
});
} else {
location.reload();
}
},
'json'
);
}
);
}
并有PHP代码
if($_POST)
{
$username = $_POST['username'];
$password = $_POST['password'];
$post = Validation::factory($_POST);
$post->rule('username', 'not_empty');
$post->rule('password', 'not_empty');
if($post->check())
{
if(!Auth::instance()->login($username, $password, true))
{
echo json_encode(array('Неверный Логин или Пароль'));
}
}
else
{
$errors = $post->errors('validation');
echo json_encode($errors);
}
}
如果Ajax返回一些带有错误的文本(res!=null),Jquery将正常工作。如果Ajax返回时没有任何信息,则"else"块中不会发生任何事情。
我该如何解决这个问题?
您指定的数据类型是json,因此如果返回值为null,则不会对其进行处理。尝试更改数据类型或在php文件中以json格式返回错误:)
检查res != null
是问题所在。空数组无法与null
进行比较。更改条件以检查阵列长度:
if (res.length > 0) {
其次,如果提交的凭据格式有效且正确,PHP将不返回任何内容。这将导致jQuery error
处理程序而不是success
被激发,因为空白响应不能被解析为JSON。添加另一个返回空数组的else子句:
if(!Auth::instance()->login($username, $password, true)){
echo json_encode(array('Неверный Логин или Пароль'));
} else {
echo json_encode(array());
}
尝试将您的PHP代码更改为:
$result = null;
if($_POST)
{
$username = $_POST['username'];
$password = $_POST['password'];
$post = Validation::factory($_POST);
$post->rule('username', 'not_empty');
$post->rule('password', 'not_empty');
if($post->check())
{
if(!Auth::instance()->login($username, $password, true))
{
$result = array('Неверный Логин или Пароль');
}
}
else
{
$result = $post->errors('validation');
}
}
echo json_encode($result);
这将导致在所有可能的情况下都对结果进行json编码。