0

フォームデータをphpファイルに送信し、データベースに対してチェックして応答を返すjquery ajax関数があります。しかし、私の成功関数は実行されていません。代わりに、エラー関数を介して応答が返されます。

以下は私のlogin.jsコードです:

$(document).ready(function(){
    $("form#loginForm").submit(function() { // loginForm is submitted
        var username = $('#username').attr('value'); // get username
        var password = $('#password').attr('value'); // get password

    if (username && password) { // values are not empty
        $.ajax({
            type: "POST",
            url: "url", // URL of the Php script
            contentType: "application/json; charset=utf-8",
            dataType: "json", //expected from server in response
            // send username and password to the Php script
            data: "username=" + username + "&password=" + password,


            error: function(XMLHttpRequest, textStatus, errorThrown) { // script call was *not* successful
                $('div#loginResult').text("responseText: " + XMLHttpRequest.responseText
                + ", textStatus: " + textStatus
                + ", errorThrown: " + errorThrown);
                $('div#loginResult').addClass("error");
            },

            success: function(data){ //script was successful, data contains response from mysql database
                if (data.error) { // login was not successful
                    $('div#loginResult').text("data.error: " + data.error);
                    $('div#loginResult').addClass("error");
                } // if
                else { // login was successful
                    $('form#loginForm').hide();
                    $('div#loginResult').text("data.success: " + data.success);
                    $('div#loginResult').addClass("success");
                } //else
            } // success
        }); // ajax
    } // if
    else {
        $('div#loginResult').text("enter username and password");
        $('div#loginResult').addClass("error");
    } // else
    $('div#loginResult').fadeIn();
    return false;
});
});

これは私の Login.php コードです:

 <?php



$username = $_POST["username"];
$password = $_POST["password"];


$dbhost = '*****';
$dbuser = '*****';
$dbpass = '*****';
$conn = mysql_connect($dbhost, $dbuser, $dbpass); // connect to server
if(! $conn )
{
    die('Could not connect: ' . mysql_error());
}

echo 'Connected to database successfully,';

mysql_select_db('sl493',$conn); //pick sl493 database


$result = mysql_query("SELECT *
        FROM metauser
        WHERE metauser.username = '$username'
        AND metauser.password = '$password'") or die(mysql_error()); //select data from metauser table

$row = mysql_fetch_assoc($result);

if($row['username'] == $username) //If username and password not accepted
{$result = 'true login';
 $arr = array('success' => "login is successful");
 echo json_encode($arr);}

else //if username and password are not accepted
{$result = 'login failed';
 $arr = array('error' => "username or password is wrong");
 echo json_encode($arr);}

?>

現在、入力した資格情報が正しいか間違っているかに関係なく、次の応答が返されます。

responseText: データベースに正常に接続されました,{"success":"ログインに成功しました"} , textStatus: parsererror, errorThrown: 無効な JSON: データベースに正常に接続されました,{"success":"ログインに成功しました"} http://i. imgur.com/n1nZ2ac.jpg

「データベースに正常に接続されました」を返します。これは、login.php に正常に移動したことを意味しますが、ajax:error の一部である responseText も返します。関数が正常に実行されたため、移動すべきではありません。HALP ?

4

3 に答える 3

1

私は何が間違っていたかを考え出した:

  1. 最初に、文字列として送信しているときに ContentType を json として指定したので、それを変更する必要がありました。

  2. 次に、$_POST に Is_set andis_empty 関数を使用して、POST フィールドを取得していることを確認しました。

  3. 最後に、理由で返される ajax 変数データはキーで表示されないため、data.success は定義されていませんが、data は php ファイルからのすべての出力を返します。

返された JSON にキーでアクセスできない理由をまだ解明しようとしています。何か提案があれば教えてください。別の質問を作成するつもりはありません。以下は作業コードです:

$(document).ready(function(){
    $("form#loginForm").submit(function() {

    // loginForm is submitted
        var username = $('#username').attr('value'); // get username
        var password = $('#password').attr('value'); // get password
        console.log(username + password) ;

        if (username && password) { // values are not empty
            $.ajax({
                type: "POST",
                url: "https://xxx/login.php", // URL of the Php script
                contentType: "application/x-www-form-urlencoded; charset=utf-8",

                dataType: "application/json", //expected from server in response
                // send username and password to the Php script
                //data: "username=" + username + "&password=" + password,
                data:'username='+ username+'&password='+ password,

                error: function(XMLHttpRequest, textStatus, errorThrown) { // script call was *not* successful
                    $('div#loginResult').text("responseText: " + XMLHttpRequest.responseText
                    + ", textStatus: " + textStatus
                    + ", errorThrown: " + errorThrown);
                    $('div#loginResult').addClass("error");
                },

                success: function(data){


                    $('form#loginForm').hide();
                    $('div#loginResult').text("Login: " + data );
                    $('div#loginResult').addClass("success");
                                                                }


            });
        }
        else {
            $('div#loginResult').text("enter username and password");
            $('div#loginResult').addClass("error");
        } // else
        $('div#loginResult').fadeIn();
        return false;
    });
})

;

ログイン.php

<?php

if (isset($_POST["username"]) && !empty($_POST["username"])) {
    $username = $_POST["username"];}

if (isset($_POST["password"]) && !empty($_POST["password"])) {
    $password = $_POST["password"];}

$dbhost = 'xxx';
$dbuser = 'xxxxxx';
$dbpass = 'xxxxxxxx';
$conn = mysql_connect($dbhost, $dbuser, $dbpass); // connect to server
if(! $conn )
{
    die('Could not connect: ' . mysql_error());
}
mysql_select_db('sl493',$conn);

$query = mysql_query("SELECT *FROM metauser WHERE metauser.username = '$username'AND metauser.password = '$password'") or die(mysql_error()); //select data from metauser table
$row = mysql_fetch_assoc($query);


if($row['username'] == $username)
{
        if($row['usertype']== 'student')
              { $type = 'student'; }
                    else{ $type = 'admin'; }

    //$arr = array('result' => 'loginOK', 'usertype' => $type);

    $associativeArray = array();
    $associativeArray ['result'] = 'success';
    $associativeArray ['usertype'] = $type;

    //$arr = '{"success":"login is successful"}';
    //echo $type;
    echo json_encode($associativeArray); }


else
{$arr = '{"error":"username or password is wrong"}';
    echo json_encode($arr);}

?>
于 2015-03-22T03:08:14.803 に答える
0

これを試して:

var data="";
data=['username':username,'password':password];//Add this

 $.ajax({
            type: "POST",
            url: "url", // URL of the Php script
            contentType: "application/json; charset=utf-8",
            dataType: "json", //expected from server in response
            // send username and password to the Php script
            data: JSON.stringify(data),//Stringify your data while sending
            success: function(data){ //script was successful, data contains response from mysql database
                if (data.error) { // login was not successful
                    $('div#loginResult').text("data.error: " + data.error);
                    $('div#loginResult').addClass("error");
                } // if
                else { // login was successful
                    $('form#loginForm').hide();
                    $('div#loginResult').text("data.success: " + data.success);
                    $('div#loginResult').addClass("success");
                } //else
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) { // script call was *not* successful
                $('div#loginResult').text("responseText: " + XMLHttpRequest.responseText
                + ", textStatus: " + textStatus
                + ", errorThrown: " + errorThrown);
                $('div#loginResult').addClass("error");
            }, // success
        }); // ajax
于 2015-03-18T06:19:22.930 に答える
0

dataType: "json" ajax データ型を からに変更してください

datatype: "application/json"

header('HTTP/1.1 401 Unauthorized', true, 401);不正な応答の場合の応答ヘッダーの問題を解決するには、以下に示すように、コードの else 部分に応答ヘッダーを追加してください。

else //if username and password are not accepted
{$result = 'login failed';
 $arr = array('error' => "username or password is wrong");
header('HTTP/1.1 401 Unauthorized', true, 401);
 echo json_encode($arr);} 
于 2015-03-18T18:23:52.857 に答える