0

私は自分が間違ったことを理解しようとしていましたが、JavaScript コンソールを使用すると、次のエラーが表示されます: null のプロパティ 'success' を読み取れません。

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であると仮定すると、#プレフィックスがありません。EDIT:これらはIDではありませんが、セレクターは関係なく無効であることが判明しました

serialize()jQuery で formData に解析するデータ オブジェクトを作成する場合は、使用しないでください。どちらかを使用してください。

簡単にするために、 を使用してみてくださいvar username = $("#inputUsername").val()。それに応じてパスワードフィールドのIDを修正できます

dataTypeoptions オブジェクトに 2 回あり、1 回はタイプミスがあります。datatype:"json",キャメルケースでないものを削除

ブラウザ コンソールで 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()を参照してください)

于 2012-12-25T06:31:54.057 に答える
0

私はあなたのページでテストします。他にも問題があります。セレクターが間違っているため、ajax 呼び出しの postvaribales がありません。ID セレクターを介して入力の name 属性を選択しようとしています。あなたの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 に答える