国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ajax表單驗(yàn)證

原創(chuàng) 2019-04-23 09:29:55 412
摘要:獲取按鈕元素并創(chuàng)建點(diǎn)擊事件。創(chuàng)建一個(gè)監(jiān)聽(tīng)對(duì)象,如果監(jiān)聽(tīng)對(duì)象的狀態(tài)返回值是4表示請(qǐng)求已經(jīng)完成并響應(yīng)就緒,再判斷一下如果返回的值是200說(shuō)明查詢成功。然后新建一個(gè)p標(biāo)簽用于輸出查詢狀態(tài)。var json = JSON.parse(xhr.responseText);是把從服務(wù)器發(fā)送過(guò)來(lái)的信息轉(zhuǎn)換成js格式。如果查詢的信息返回值是1說(shuō)明查詢到了對(duì)應(yīng)的信息直接輸出之前設(shè)定好的值,反之則依然。然后把登錄信息


  1. 獲取按鈕元素并創(chuàng)建點(diǎn)擊事件。

  2. 創(chuàng)建一個(gè)監(jiān)聽(tīng)對(duì)象,如果監(jiān)聽(tīng)對(duì)象的狀態(tài)返回值是4表示請(qǐng)求已經(jīng)完成并響應(yīng)就緒,再判斷一下如果返回的值是200說(shuō)明查詢成功。然后新建一個(gè)p標(biāo)簽用于輸出查詢狀態(tài)。var json = JSON.parse(xhr.responseText);是把從服務(wù)器發(fā)送過(guò)來(lái)的信息轉(zhuǎn)換成js格式。如果查詢的信息返回值是1說(shuō)明查詢到了對(duì)應(yīng)的信息直接輸出之前設(shè)定好的值,反之則依然。然后把登錄信息用剛才的p標(biāo)簽發(fā)送到頁(yè)面上再禁用按鈕功能,設(shè)置定時(shí)器對(duì)頁(yè)面進(jìn)行重定位跳轉(zhuǎn)。

  3. 設(shè)置請(qǐng)求方式為post,后臺(tái)路徑是include下的check.php文件,由于發(fā)送的是form表單請(qǐng)求,所以表單頭要修改一下xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

  4. 把需要發(fā)送驗(yàn)證對(duì)象的value值以字面量形式賦值給data,然后把data以json方式轉(zhuǎn)換一下數(shù)據(jù)賦值給data_json,由于直接發(fā)送的data_json數(shù)據(jù)沒(méi)有下標(biāo),下面的data就是加上下標(biāo)進(jìn)行發(fā)送方便查詢
    xhr.send('data='+data_json);

  5. database.php配置一下數(shù)據(jù)庫(kù)的信息

  6. 在check.php里載入數(shù)據(jù)庫(kù)信息文件并賦值給$db,使用PDO方式連接數(shù)據(jù)庫(kù),使用json_decode($_POST['data'])方法接收post發(fā)送過(guò)來(lái)的數(shù)據(jù)并賦值給user,實(shí)例化并賦值郵箱和密碼字段并進(jìn)行數(shù)據(jù)庫(kù)查詢。

  7. 如果查詢到的數(shù)據(jù)==1說(shuō)明結(jié)果為真,那么就echo json_encode(['status'=>1,'msg'=>'登錄成功,正在跳轉(zhuǎn)...']) ;
    輸出到前端頁(yè)面,前端頁(yè)面接收到數(shù)據(jù)后跳轉(zhuǎn)指定的admin.php頁(yè)面。

總結(jié)寫代碼過(guò)程中的錯(cuò)誤:前臺(tái)頁(yè)面如果使用的是div而不是form,并且js里使用的是div而不是forms的話查詢是沒(méi)有任何響應(yīng)的,并且在驗(yàn)證的php頁(yè)面里不能有輸出打印標(biāo)簽,否則前臺(tái)也不顯示。數(shù)據(jù)庫(kù)配置文件需要使用return方式返回,并且數(shù)組的[]最后要加;分號(hào)結(jié)尾。

QQ截圖20190423091018.jpg

前臺(tái)代碼:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
 content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>表單提交系統(tǒng)</title>
    <style>
        *{
            padding: 0;
            margin: 0;
            font-size: 14px;
        }
        form{
            width: 260px;
            margin:130px auto;
        }
        p{
            margin: 20px 0;
        }
        p:first-child{
            text-align: center;
            font-weight: bold;
            font-size: 22px;
        }
        p:last-child{
            text-align: center;
        }
    </style>
</head>
<body>
    <form>
        <p>賬戶登錄系統(tǒng)</p>
        <p>
            <label>郵箱:</label>
            <input type="email" name="email">
        </p>
        <p>
            <label>密碼:</label>
            <input type="password" name="password">
        </p>
        <p><button type="button">登錄</button></p>

    </form>
    <SCRIPT>
        // 獲取按鈕
 let btn = document.getElementsByTagName('button')[0];
        // 創(chuàng)建按鈕點(diǎn)擊事件
 btn.onclick = function (){
            // 1.創(chuàng)建監(jiān)聽(tīng)對(duì)象
 let xhr = new XMLHttpRequest();
            // 2.監(jiān)聽(tīng)響應(yīng)狀態(tài)
 xhr.onreadystatechange = function () {
                // 如果獲取到的返回值是4說(shuō)明配置正確
 // 0: 請(qǐng)求未初始化
 // 1: 服務(wù)器連接已建立
 // 2: 請(qǐng)求已接收
 // 3: 請(qǐng)求處理中
 // 4: 請(qǐng)求已完成,且響應(yīng)已就緒
 if (xhr.readyState === 4) {
                    // 返回200表示查詢成功
 if (xhr.status === 200) {
                        let p = document.createElement('p');
                        p.style.color = 'red';

                        // .responseText把服務(wù)器發(fā)送的信息提取出來(lái)使用JSON.parse把數(shù)據(jù)轉(zhuǎn)換成js對(duì)象格式。
 var json = JSON.parse(xhr.responseText);
                        // 從后臺(tái)傳遞過(guò)來(lái)的數(shù)據(jù)如果查詢到是1說(shuō)明有數(shù)據(jù)如果是0說(shuō)明沒(méi)有數(shù)據(jù)內(nèi)容
 if (json.status === 1) {
                            p.innerHTML = json.msg;
                        } else if (json.status == 0) {
                            p.innerHTML = json.msg;
                        }
                        // 把是否登錄成功提示信息發(fā)送到頁(yè)面上
 document.forms[0].appendChild(p);
                        // 禁用按鈕
 btn.disabled = true;
                        // 設(shè)置定時(shí)器,讓提示內(nèi)容顯示2秒跳轉(zhuǎn)。
 setTimeout(function () {
                            document.forms[0].removeChild(p);
                            btn.disabled = false;
                            if (json.status == 1) {
                                location.href = 'admin.php';
                            }
                        }, 2000);

                    } else {
                        // 響應(yīng)失敗的提示
 alert('響應(yīng)失敗' + xhr.status);
                    }


                } else {

                }


            }
           
            // 設(shè)置一下請(qǐng)求方式以及后臺(tái)文件
 xhr.open('post','include/check.php',true);
            // 這里需要修改表單頭提交信息欺騙一下瀏覽器
 xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

            // 發(fā)送請(qǐng)求給后臺(tái)
 let data = {
                email:document.getElementsByName('email')[0].value,
                password:document.getElementsByName('password')[0].value
 }
            // 把data以json字符串方式發(fā)送給服務(wù)器
 let data_json = JSON.stringify(data);
            // 由于直接發(fā)送的data_json數(shù)據(jù)沒(méi)有下標(biāo),下面的data就是加上下標(biāo)進(jìn)行發(fā)送方便查詢
 xhr.send('data='+data_json);
        }
    </SCRIPT>

</body>
</html>

后臺(tái)驗(yàn)證頁(yè)面代碼:

<?php

// 數(shù)據(jù)庫(kù)連接參數(shù)
$db = require 'database.php';

// 配置數(shù)據(jù)源DSN信息
$dsn = "{$db['type']}:host={$db['host']};dbname={$db['dbname']}";

// 連接數(shù)據(jù)庫(kù)
try {
    $pdo = new PDO($dsn, $db['username'], $db['password']);
} catch (PDOException $e) {
    die('Connection Failed: ' . $e->getMessage());
}
//測(cè)試一下是否能接收到數(shù)據(jù)
 

$user = json_decode($_POST['data']);
 
$email = $user->email;
$password = $user->password;




$sql = "SELECT COUNT(*) FROM `user` WHERE `email`='{$email}' AND `password`='{$password}' ";

$stmt = $pdo->prepare($sql);

$stmt->execute();


if ($stmt->fetchColumn(0) == 1) {

    echo json_encode(['status'=>1,'msg'=>'登錄成功,正在跳轉(zhuǎn)...']) ;
    exit;
} else {
    echo json_encode(['status'=>0,'msg'=>'郵箱或密碼錯(cuò)誤,登錄失敗!']) ;
    exit;
}

數(shù)據(jù)庫(kù)配置代碼:

<?php

// 數(shù)據(jù)庫(kù)連接參數(shù)
return [
    'type' => 'mysql',
    'host' => 'localhost',
    'dbname' => 'user',
    'username' => 'root',
    'password' => 'root',
];


批改老師:查無(wú)此人批改時(shí)間:2019-04-23 13:49:51
老師總結(jié):完成的不錯(cuò)。ajax用處比較大。特別是手機(jī)的列表頁(yè),上拉加載更多。繼續(xù)加油。

發(fā)佈手記

熱門詞條