我有这个非常简单的登录表单与用户和传递我需要检查两者都在数据库中我使用ajax:
$("#clientes").bind("submit", function() {
$(".error_usu").hide();
$.ajax({
type : "POST",
cache : false,
url : "login.php",
data : $(this).serializeArray(),
success: function(data) {
switch(data){
case '1'://exito
alert("alert!");
window.location.href = "clientes.php";
break;
case '2'://pass
$(".error_pass").show();
break;
}
}
});
return false;
});
在login.php中有如下内容:
<? session_start();
if(!empty($_POST['usuario']) && !empty($_POST['password']))
{
include "funciones.php";
$username = $_POST['usuario'];
$password = $_POST['password'];
$con=conectar();
$checklogin = mysql_query("SELECT * FROM clientes WHERE user = '".$username."' AND pass = '".$password."'",$con) or die (mysql_error());
if(mysql_num_rows($checklogin) == 1){
$_SESSION['usuario'] = $_POST['usuario'];
$_SESSION['password'] = $_POST['password'];
echo '1';
}else{
echo '2';
}
}else{
echo '2';
}?>
当我检查firebug时,我看到我得到一个1或2,但de成功函数从来没有工作!在我让数据库在login.php中以这种方式检查之前,我尝试过这个,它工作了:
if($_POST['usuario']=="fulano" && $_POST['password']=="fulano"){
echo '1';
}
它不工作,因为$_SESSION变量?我不完全理解ajax函数是如何工作的
如果它没有进入switch语句,您可以将响应乘以1,然后JavaScript将其作为数字而不是文本。
success: function(data) {
data *= 1;
switch(data){
或
success: function(data) {
data = parseInt(data);
switch(data){
您可以尝试通过在ajax调用中实现错误处理程序来捕获响应。您还可以尝试设置期望接收的数据类型。它看起来像这样:
en$.ajax({
type : "POST",
cache : false,
url : "login.php",
data : $(this).serializeArray(),
dataType : "text",
error : function(jqXHR, textStatus, errorThrown) {
//Look at the values of jqXHR, textStatus, errorThrown
},
success: function(data) {
switch(data){
case '1'://exito
alert("alert!");
window.location.href = "clientes.php";
break;
case '2'://pass
$(".error_pass").show();
break;
}
}
});
您是否尝试指定要使用的正确数据类型?
例如: type: "POST",
dataType: "text",
只是为了确保你可以添加:
error: function(err){alert("Errror:"+err.toString());},
,看看它是否返回一个错误,如果是,错误字符串是什么。
你也可以试试这个,以防你的成功方法被击中:
success: function(data) {alert(data==1); alert(data=='1'); }