Blogger Information
Blog 15
fans 0
comment 1
visits 14750
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
Ajax - GET和Ajax - POST 请求数据,JavaScript AJAX的使用(2019年8月5日11时57分)
楚Chen
Original
697 people have browsed it

使用JavaScript代码来代理用户发起的HTTP请求 称为异步请求 Ajax 

 AJAX请求的步骤 

    创建请求对象

    监听成功回调

    设置请求参数

    发送AJAX请求 

Ajax-GET 请求数据

通过用户输入的信息,使用Ajax-GET的方式来获取服务器脚本传过来的对应的数据。

在前端通过判断来把对应的数据显示到网页上

实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>AJAX-GET</title>
</head>
<body>  
        <p>
            <label for="userid">用户ID:</label>
            <input type="text" id="userid" name="userid" autocomplete="off" >
            <!-- autocomplete="off" 关闭文本框记录历史输入数据 -->
        </p>
        <p id="tips"></p>   
    <script>
        // 获取id输入框
        var input = document.getElementById('userid');
        // 获取提示信息tips
        var tips = document.getElementById('tips');
        // AJAX 对象
        // 1.创建:请求对象
        var request = new XMLHttpRequest();
        // 给Input设置事件监听
        input.addEventListener('keypress', keyEnter, false);
        function keyEnter(event) {
            console.log(event.target.value);
            
            // 判断当前按键是否是Enter键
            if ( event.key === 'Enter' ) {
                // 判断当前输入的内容
                switch ( true ) {
                    // 判断当前输入的内容不能为空
                    case input.value.length === 0:
                        tips.innerHTML = "<span style='color:red';>ID不能为空!</span>"
                        return false;
                    // 当前输入内容只能是整数
                    case isNaN(input.value):
                        tips.innerHTML = "<span style='color:red';>ID必须是一个整数!</span>"
                        return false;
                    //当数据全部合法后,进入AJAX异步执行
                    default:
                        // 2.监听:成功回调
                        request.addEventListener( 'readystatechange', successCallback, false );
                        // 3.设置:请求参数
                        // request.open(请求类型, 请求的服务器上的处理脚本程序, 是否是异步执行);
                        // 请求类型:GET POST
                        // 是否异步:true  false
                        // 给数据进行编码处理
                        // encodeURIComponent()
                        var valueData = encodeURIComponent(input.value);
                        request.open( 'GET', 'php/user.php?userid='+valueData, true );
                        // 4.发送:异步请求
                        // GET请求默认为null,不用传参
                        // POST请求需要传参
                        request.send(null);
                }
            }

            // 成功回调函数
            function successCallback(event) {
                console.log(event.target);
                // 如果readyState的值等于4,就说明请求成功,则返回获取的数据插入到页面中
                // responseText 获取脚本程序返回的文本数据
                if (event.target.readyState === 4) {
                    tips.innerHTML = event.target.responseText;
                }
                
            }
        }

        // 设置输入框事件
        // 当输入的ID发生变化是,自动删除tips里已经获取到的数据
        input.addEventListener('input', function (event) {
            tips.innerText = null;
            
        },false);
    </script>
</body>
</html>

运行实例 »

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

Ajax-POST 发送数据、请求数据

POST方式与GET不同

使用POST方式发送请求数据,需要先设置请求头(内容的类型,发送数据的格式)

request.setRequestHeader('内容类型', '发送数据的格式')

GET发送请求可以为空。POST则必须传值

实例-表单验证-Ajax-POST请求

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>AJAX-POST</title>
</head>
<body>
    <h2>用户登录</h2>
    <form action="" name="login">
        <p>
            <label for="username">帐号:</label>
            <input type="text" name="username" id="username" placeholder="输入邮箱或手机号">
        </p>
        <p>
            <label for="password">密码:</label>
            <input type="password" name="password" id="password" placeholder="输入密码">
        </p>
        <p>
            <label for="email">邮箱:</label>
            <input type="email" name="email" id="email" placeholder="admin@php.cn">
        </p>
        <p>
            <label for="remember">记住我:</label>
            <select name="remember" id="remember">
                <option value="1" name="day" selected>一天</option>
                <option value="7" name="week">一周</option>
                <option value="30" name="month">一个月</option>
            </select>
        </p>
        <p>
            <button type="button" name="submit">登录</button>
        </p>
    </form>
    <script>
        // 获取相关的表单元素
        // 获取form表单
        var loginForm = document.forms.namedItem('login');
        // 获取from下的元素节点
        // 获取帐号文本框
        var userName = loginForm.username;
        // 获取密码文本框
        var passWord = loginForm.password;
        // 获取邮箱文本框
        var email = loginForm.email;
        // 获取记住我 下拉框
        var remember = loginForm.remember;
        // console.log(userName);
        //获取按钮
        var button = loginForm.submit;
        // 创建AJAX对象
        var request = new XMLHttpRequest();

        // 对表单进行数据验证
        // 验证表单内容不能为空
        // 验证用户名不能为空
        userName.addEventListener('blur', noEmpty, false);
        // 验证邮箱不能为空
        passWord.addEventListener('blur', noEmpty, false);
        // 验证密码不能为空
        email.addEventListener('blur', noEmpty, false);
        // 非空验证方法
        function noEmpty(event) {
            console.log(event.target.value.length);
            // 判断如果输入的内容为空,则显示提示信息
            if ( event.target.value.trim().length === 0 ) {
            // 创建动态提示信息
            // 判断当前要插入提示信息的位置,有没有数据,如果有就不执行,如果没有就创建提示信息
            if (event.target.nextElementSibling === null) {
                var tips = document.createElement('span');
                // 给提示信息添加样式
                tips.style="color:red; font-size:12px;"

                // 根据事件目标设置提示信息
                console.log(event.target.name);
                // event.target.name获取当前点击控件的name值
                switch (event.target.name) {
                    // name值等于username,则插入账号不能为空
                    case 'username':
                        tips.innerText = '*帐号不能为空'
                        break;
                    // name值等于password,则插入密码不能为空
                    case 'password':
                        tips.innerText = '*密码不能为空'
                        break;
                    case 'email':
                        tips.innerText = '*邮箱不能为空'
                        break;
                    default:
                        tips.innerText = '未知错误'                   
                }
                // 将span元素 提示信息添加到页面中
                // 插入到input的父级节点下
                event.target.parentNode.appendChild(tips);
            }
            // 将焦点锁定到错误数据上
            event.target.focus();
            
            }
        }
        // 当用户输入内容后,清除提示信息
        console.log(document.getElementsByTagName('span')[1]);
        loginForm.addEventListener('input', function (event) {
            // span 标签 = 当前点击文本框的下一个兄弟节点
            var span = event.target.nextElementSibling;
            // 如果不为空,则清除提示信息
            if (span !== null) {                
                span.innerText = "";
                // span.parentNode.removeChild(span)
            }           
            
        },false);
        // AJAX验证
        // 给提交按钮添加一个点击事件
        console.log(button);
        // 获取页面中所有的input
        var input = document.getElementsByTagName('input');
        button.addEventListener('click', check, false);
        function check(event) {
            // 当没有输入内容的时候,禁止提交
            console.log(userName);
            
            if ( userName.value.length === 0 || passWord.value.length === 0 || email.value.length === 0 ) {
                // 当输入内容为空,移除点击事件
                button.removeEventListener('click', check, false);
                // 事件模拟器当用户没有输入内容就点击提交按钮后,自动焦点到第一个文本框
                var blurEvent = new Event('blur');
                // userName.dispatchEvent(blurEvent);
                // 循环给每个为空的文本框添加失去焦点事件
                for (var i = 0; i < input.length; i++) {
                    console.log(input[i]);
                    // 判断内容为空的文本框
                    if (input[i].value.length === 0) {
                        input[i].dispatchEvent(blurEvent);
                        
                    }
                }
                return false;   
            }
        // 监听成功回调
        request.addEventListener('readystatechange', successCallback, false);

        // 设置请求参数
        request.open('POST', 'php/check.php', true);
        // 因为是POST,要设置请求头。模拟表单数据格式进行发送 键值对
        // request.setRequestHeader('内容类型', '发送数据的格式');
        request.setRequestHeader('content-type', 'application/x-www-form-urlencoded;charset=utf-8');
        // 发送AJAX请求
        // 请求值就是键值对的格式
        var data = 'username='+userName.value+'&password='+passWord.value+'&email='+email.value+'&remember='+remember.value;
        request.send(data);      
        }
        // 成功回调函数
        function successCallback(event) {
            if ( request.readyState === 4 ) {
                console.log(request.responseText);
                
            }
        }
    </script>
</body>
</html>

运行实例 »

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


Correction status:qualified

Teacher's comments:原生的Ajax虽然麻烦, 但是从底层让大家对异步执行有了更加深入的了解, 远比直接学习$.ajax()要棒的多
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments