博主信息
博文 36
粉丝 1
评论 0
访问量 39996
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
Ajax工作原理_用户登陆验证_2018年9月13日
宋超的博客
原创
1045人浏览过

一.Ajax工作原理
Ajax简单来说就是通过客 户端向服务器发出异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面,在此期间页面不会进行跳转就会看到返回的数据,对用户体验比较友好;另一方便因为Ajax都是异步请教数据,而通过js操作DOM来返回数据,所以在对搜索引擎的友好度上要差些.
Ajax常用在用户提交数据验证,以及实时数据交互的场景中,比如QQ空间发表的说说,微博,各大网站的留言评论等.
二.Ajax验证登陆

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>login</title>
    <style>
        div{
            width: 400px;
            max-height:300px;
            margin: 20px auto;
            padding: 10px 50px 10px 60px;
            box-shadow:10px 10px 10px #ccc;
            border-radius:10px;
            background:#fff;
            border:1px solid lightgray;
        }
        div>p{
            line-height: 28px;
            height: 28px;
        }
        input,button{
            height:28px;
        }
        input{
            padding-left: 20px;
        }
    </style>
</head>
<body>
<div>
    <h3>用户登录</h3>
    <p>用户: <input type="email" name="email" ></p>
    <p>密码: <input type="password" name="password" ></p>
    <p><button type="button">登录</button></p><p id="loading"></p>
</div>
<script>
    let btn = document.getElementsByTagName("button")[0];
    btn.onclick = function (){
        // 先对表单进行判断
        let email = document.getElementsByName('email')[0];
        let pass = document.getElementsByName('password')[0];
        if(email.value === ''){
            alert('请输入用户名');
            email.focus();
            return false;
        }else if(pass.value === ''){
            alert('请输入密码');
            pass.focus();
            return false;
        }


        //1.创建对象
        let xhr = new XMLHttpRequest();
        //2.监听响应状态
        xhr.onreadystatechange = function (){
            if(xhr.readyState !== 4 || xhr.status !== 200){
                //判断是否获取到数据
                let loading = document.createElement('img');
                loading.src = 'inc/loading.gif';
                loading.style = 'width:40px;height:40px;float:left;';
                let countload = document.getElementsByTagName('img');
                if(countload.length < 1){
                document.getElementById('loading').appendChild(loading);
                }
            }else{
                //生成返回数据
                let p = document.createElement('p');
                p.style.color = 'red';
                //将服务器返回的json字符串转为js对象
                let jsondata = JSON.parse(xhr.responseText);

                /*if(jsondata.status === 1){
                    p.innerHTML = jsondata.msg;
                }else if (jsondata.status ===0){
                    p.innerHTML = jsondata.msg;
                }*/

                p.innerHTML = jsondata.msg;
                rmload = document.getElementById('loading');
                setTimeout(function () {
                    document.getElementsByTagName('div')[0].removeChild(rmload);
                    document.getElementsByTagName('div')[0].appendChild(p);
                    if (jsondata.status == 1) {
                        alert('确认跳转');
                        location.href = 'admin.php';
                    }
                },2000);


            }
        }
        //3.设置请求参数
        xhr.open('post','inc/cheak.php',true);

        //4.设置请求头信息
        xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded')


        //5.发送请求
        let data = {
            email:document.getElementsByName('email')[0].value,
            password:document.getElementsByName('password')[0].value
        };
        data_json = JSON.stringify(data);
        xhr.send('data=' + data_json);  //将数据变为数组传递
        btn.disabled = true;

    }

</script>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

cheak.php

<?php
/**
 * 验证登陆
 */
//print_r($_POST);
//echo $_POST['data'];
$user = json_decode($_POST['data']);
$email = $user->email;
$password = sha1($user->password);

//验证数据库中的数据
$pdo  = new PDO('mysql:host=127.0.0.1;dbname=php','root','admin');

$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'=>'登陆成功,跳转中...']);
}else{
    echo json_encode(['status'=>'0','msg'=>'用户名或密码错误...']);
}

三.Ajax运行流程

微信图片_20180916143545.jpg
Ajax运行流程demo ,GET方式提交实例;

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<button>美文阅读</button>
<script>
    let btn = document.getElementsByTagName('button')[0];
    btn.onclick = function (){
        // 1.创建XHR对象
        let xhr = new XMLHttpRequest();
        //2.监听响应状态
        xhr.onreadystatechange = function(){
            if (xhr.readyState ===4){
                //判断是否获取到了响应数据
                if (xhr.status === 200){
                    let div = document.createElement('div');
                    div.style.width = '500px';
                    div.style.height = '600px;';
                    div.innerHTML = xhr.responseText;  //xhr.responseText 从服务器上取回的数据
                    //将新元素,也就是获取到的内容插入到页面中

                    document.body.appendChild(div);
                }else{
                    alert('响应失败'+xhr.status);
                }
            }else{
                //http请求正在继续,此处可放一个gif图
            }

        }
        //3.设置请求参数
        xhr.open('get','demo2.html',true);
        //4.发送请求
        xhr.send(null);
        btn.disabled = true;
    }
</script>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

360截图20180916144619398.jpg
点击按钮后的效果图!

总结:详细了解Ajax的工作原理,通过POST提供数据是需要设置setRequestHeader  请求头信息,否则提交不了数据.



本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学