0

我一直在试图弄清楚我做错了什么,但是当我使用我的 JavaScript 控制台时,它向我显示了这个错误:无法读取 null 的属性“成功”。

JavaScript

<script>
$(document).ready(function() {
$("#submitBtn").click(function() {
loginToWebsite();
})
});
</script>
<script type="text/javascript">
function loginToWebsite(){
var username = $("username").serialize();
var password = $("password").serialize(); 
     $.ajax({  
 type: 'POST', url: 'secure/check_login.php',  dataType: "json",  data: { username: username, password: password,  },
    datatype:"json",
            success: function(result) {                 
               if (result.success != true){
                   alert("ERROR");
                   }
                   else
                   {
                       alert("SUCCESS");
                   }
            }   
    });  
} 
</script>

PHP

$session_id = rand();
loginCheck($username,$password);
function loginCheck($username,$password)
{
    $password = encryptPassword($password);
    if (getUser($username,$password) == 1)
    {
       refreshUID($session_id);
        $data = array("success" => true);
        echo json_encode($data);
    }
    else
    {
        $data = array("success" => false);
        echo json_encode($data);
    }
}
function refreshUID($session_id)
{
    #Update User Session To Database
    session_start($session_id);
}
function encryptPassword($password)
{
    $password = $encyPass = md5($password);
    return $password;
}
function getUser($username,$password)
{
$sql="SELECT * FROM webManager WHERE username='".$username."' and password='".$password."'";
$result= mysql_query($sql) or die(mysql_error());
$count=mysql_num_rows($result) or die(mysql_error());
if ($count = 1)
{
    return 1;
}
else 
{
    return 0;;
}
}
?>

我正在尝试创建一个登录表单,该表单将为用户提供信息,告诉他他的用户名和密码是否正确。

4

4 回答 4

2

您的代码中有几个严重的语法问题会导致将无效数据发送到服务器。这意味着如果空字段导致您的 php 函数出现问题,您的 php 可能不会使用 JSON 响应。

没有返回数据意味着result.success不存在......这很可能是您看到的错误。

首先选择器: $("username")&$("password")无效,因此您的数据参数将未定义。假设这些是您缺少#前缀的元素 ID。编辑:原来这些不是 ID,但选择器无效

serialize()如果您正在创建一个数据对象以让 jQuery 解析为 formData,您不想使用。使用其中一种。

为了简单起见,尝试使用var username = $("#inputUsername").val(). 您可以相应地修复密码字段的 ID

dataType两次出现在您的选项对象中,一次有错字。删除datatype:"json",不是camelCase的

了解如何在浏览器控制台中检查 AJAX 请求。您会意识到数据参数在很短的时间内没有任何值。那时,在控制台中进行一些调试会引导您立即进行故障排除。

还要检查请求,您可能会看到没有返回任何 json

编辑:您似乎还需要在 php 中进行一些验证,因为输入数据显然会导致无法返回任何响应数据

于 2012-12-25T04:38:28.273 回答
1

尝试在后端进程中添加这个:

header("Cache-Control: no-cache, must-revalidate");
header('Content-type: application/json');
header('Content-type: text/json');

希望这有帮助!

于 2012-12-25T04:25:59.727 回答
0

您需要转换 PHP 脚本返回的字符串,(请参阅此问题)为此您需要使用$.parseJSON()(请参阅jQuery API中的更多信息)。

于 2012-12-25T06:31:54.057 回答
0

我在你的页面上测试。你还有其他问题。您的 ajax 调用中的后变量丢失了,因为您的选择器错误!您正在尝试通过 ID 选择器选择输入的名称属性。您的 input['name'] 的 ID 是“inputUsername”

所以你必须以这种方式选择它

$('#inputUsername').val();
// or
$('input[name="username"]').val();

我又试了一次。您的 PHP 脚本没有任何响应。才200。

$.ajax({
type: 'POST', 
url: 'secure/check_login.php', 
dataType: "json", 
data: 'username='+$("#inputUsername").val()+'&password='+$("#inputPassword").val(), 
success: function(result) {
    if (result.success != true){
        alert("ERROR");
    } else {
        alert("HEHEHE");
    }
}

});

尝试在 PHP 脚本的顶部添加以下代码。

    header("Content-type: appliation/json");
    echo '{"success":true}';
    exit;
于 2012-12-25T04:56:48.867 回答