原生JS AJAX GET
练习了3遍还是不能默写出来~感觉真的要练习很多遍的样子还好原理是完全懂了。
什么是AJAX ?
AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。( 比如你打开邮箱 并没有刷新网页,但是有新邮件会弹窗提示。比如你个人中心页面并没有刷新 有新通知会提示。类似的网页都是使用了ajax向服务器请求部分数据。)
我们网页一般发送数据分为GET和POST 两种 ajax都支持。
get方式呢 就是把要产送的数据在网址参数和值成对传递比如下图

ajax get流程
1 创建请求对象
var XHR=new XMLHttpRequest();
2 监听 成功回调 break;
XHR.addEventListener('readystatechange',successCallback,false);
3 设置请求参数
格式XHR.open(请求类型,请求的服务器上的处理脚本,是否异步请求)
因为是get请求所有参数在url上 但是参数转码才安全 所以先进行转码
var data=encodeURIComponent(input.value);
发送的数据会拼接到网址上传送
XHR.open('GET','php/user_info.php?user_id='+data,true);
4 发送:异步请求 因为是get方式 所以发送的数据位null
XHR.send(null);
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>7.16原生js的AJAX-GET</title>
</head>
<body>
<div class="wrap">
<label for="user_id">用户名</label>
<input type="text" name="user_id" id="user_id" value="" />
<p id='tips'></p>
</div>
<script type="text/javascript">
//获取输入框元素
var input=document.getElementById('user_id');
//获取提示框元素
var tips=document.getElementById('tips');
//1 创建请求对象
var XHR=new XMLHttpRequest();
//给input添加键盘事件
input.addEventListener('keypress',getUserInfo,false);
//事件函数
function getUserInfo (ev) {
if (ev.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;
default:
// 2 监听 成功回调 break;
XHR.addEventListener('readystatechange',successCallback,false);
// 3 设置请求参数
// 格式XHR.open(请求类型,请求的服务器上的处理脚本,是否异步请求)
//因为是get请求所有参数在url上 但是参数转码才安全 所以先进行转码
var data=encodeURIComponent(input.value);
XHR.open('GET','php/user_info.php?user_id='+data,true);
//4 发送:异步请求
XHR.send(null);
}
}
}
//成功回调函数
function successCallback (ev) {
//查看请求过程的状态
console.log(ev.target);
if(XHR.readyState===4){
//查看确定返回值是否正确
console.log(XHR.responseText)
//把返回值插入到页面上 dom操作
tips.innerHTML=XHR.responseText
}
}
//添加一个input的事件 只要内容有变化就清空tips的提示信息。
input.addEventListener('input',function(ev){
tips.innerHTML=null;
},false);
</script>
</body>
</html>点击 "运行实例" 按钮查看在线实例
服务器端php部分
<?php
$userId = isset($_GET['user_id']) ? $_GET['user_id'] : null;
$userInfo = [
['user_id'=>1, 'username'=>'苍老师', 'gender'=>'女', 'age'=>26],
['user_id'=>2, 'username'=>'波老师', 'gender'=>'女', 'age'=>23],
['user_id'=>3, 'username'=>'黑老师', 'gender'=>'男', 'age'=>33],
];
$res = '';
foreach ($userInfo as $user) {
if ($user['user_id'] === intval($userId)) {
$res .= $user['user_id'].'---'.$user['username'].'---'.$user['gender'].'---'.$user['age'];
}
}
echo empty($res) ? '<span style="color: red;">没有找到该用户名</span>' : $res;
exit;-------------------------------------------------------------------------分割线

ajax post 流程分为4个 不能乱!
1 创建ajax请求对象(xhr对象名字你喜欢就好 随便起)
var XHR=new XMLHttpRequest();
2 监听成功回调(失败了也得有个结果哈)
XHR.addEventListener('readystatechange', successCallback, false);
successCallback函数名可以自定义其他是固定格式
3 设置 请求参数 (键值对的方式传递 需要拼接)
XHR.open('POST', '/php/check.php', true);
//因为是post发送,需要设置请求头。 键值对
XHR.setRequestHeader('content-type','application/x-www-form-urlencoded;charset=utf-8');
4 发送 异步请求
先收集要发送的数据
var data = 'username='+username+'&password='+password+'&email='+email+'&remember='+remember;
发送数据
XHR.send(data);
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>7.16原生js的AJAX-POST</title>
</head>
<body>
<div class="wrap">
<h2>用户登录</h2>
<form action="" method="post" name="login">
<p>
<label for="username">用户名 </label><input type="text" name="username" id="username" value="" />
</p>
<p>
<label for="password">密 码 </label><input type="password" name="password" id="password" value="" />
</p>
<p>
<label for="email">邮 箱 </label><input type="text" name="email" id="email" value="" />
</p>
<p>
<label for="remember">级 别</label>
<select name="remember" id="remember">
<option value="1" name="day">一天</option>
<option value="7" name="week">一星期</option>
<option value="30" name="month">一个月</option>
</select>
</p>
<input type="button" name="submit" value="提交" />
</form>
<script type="text/javascript">
//获取需要处理的表单login
var login=document.forms.namedItem('login');
//获取到按钮
var btn=login.submit;
// 1 AJAX 创建 请求对象
var XHR=new XMLHttpRequest();
//前端开始啦 前端先验证数据 绑定事件来触发验证 。当输入域失去焦点 (blur)
login.username.addEventListener('blur',isEmpty,false);
login.password.addEventListener('blur',isEmpty,false);
login.email.addEventListener('blur',isEmpty,false);
//非空验证
function isEmpty(ev){
if(ev.target.value.length===0){
console.log(ev.target)
//来验证非空提示
if (ev.target.nextElementSibling===null) {
var tips=document.createElement('span');
tips.style.color='red';
//判断一下那个为空 来提示
switch (ev.target.name){
case 'username':
tips.innerText='用户名不存在';
break;
case 'password':
tips.innerText='密码不能为空';
break;
case 'email':
tips.innerText='邮箱不能为空';
break;
default:
tips.innerText='未知错误 *** 写bug的大灰狼QQ12345'
break;
}
//把错误提示添加到 追加到父元素的里面的后面
ev.target.parentNode.appendChild(tips);
}
//如果 失去焦点的元素内容为空 再次指定焦点到元素上
ev.target.focus();
}
}
//当input内容有改变 清空提示信息 先添加事件
login.username.addEventListener('input',clearTips,false);
login.password.addEventListener('input',clearTips,false);
login.email.addEventListener('input',clearTips,false);
//clearTips 清除提示函数
function clearTips(ev){
//拿到tips元素
var tips=ev.target.nextElementSibling;
if (tips!==null) {
//移除提示信息
tips.remove();
}
};
//4 ajax事件
btn.addEventListener('click',check,false);
//事件函数
function check (ev) {
//让数据调用方便一点
var username=login.username.value;
var password=login.password.value;
var email=login.email.value;
var remember=login.remember.value;
//当有必填框为空禁止提交
if (username.Length===0 || password.length ===0 || email.length ===0) {
//不让点击 应该移除点击事件
btn.removeEventListener('click',check,false);
//因为是空 所以模拟失去焦点 让焦点到输入框
var blueEvent=new Event('blur');
login.username.dispatchEvent(blueEvent);
return false;
}
//2 监听 成功回调
XHR.addEventListener('readystatechange', successCallback, false);
//3 设置 请求的参数
XHR.open('POST', '/php/check.php', true);
//因为是post发送,需要设置请求头。 键值对
XHR.setRequestHeader('content-type','application/x-www-form-urlencoded;charset=utf-8');
//4 发送:异步请求
var data = 'username='+username+'&password='+password+'&email='+email+'&remember='+remember;
XHR.send(data);
}
//成功回调函数
function successCallback (ev) {
if (XHR.readyState === 4) {
console.log(XHR.responseText)
}
}
</script>
</div>
</body>
</html>点击 "运行实例" 按钮查看在线实例
服务器端php部分
<?php
session_start();
// 获取表单提交的数据
$username = $_POST['username'];
$email = $_POST['email'];
$password = sha1($_POST['password']);
$remember = $_POST['remember'];
// 为简化代码,不用数据表验证,使用硬编码,只验证邮箱与密码
if ($email === 'admin@php.cn' && $password === sha1('123456')) {
$_SESSION['username'] = $username;
$_SESSION['email'] = $email;
echo json_encode(['status'=>1, 'message'=>'验证成功']);
} else {
echo json_encode(['status'=>0, 'message'=>'验证失败']);
}
exit;
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号