AJAX的操作步骤
GET请求
- 创建 xhr 对象
- 创建请求 - open()
- 设置回调函数 - onreadystatechange
1.判断状态
2.接收响应
3.业务处理 - 发送请求 - send(null)
GET请求 示例
以下代码中显示主要功能:
1. a 标签 跳转到新的页面(....../ajax/ajax/02-server/)显示 "这是server02的响应"
2. button 显示按钮 在当前页面显示 "这是server02的响应"
3. 配合下面的Django项目测试异步get请求呈现和 链接
(https://blog.youkuaiyun.com/weixin_45179798/article/details/96967053)[创建异步对象方法]
html 界面
<!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>Document</title>
<script src="../../../static/js/common.js"></script>
<script src="../../../static/js/exer_get.js"></script>
</head>
<body>
<button onclick="btnShow()">显示</button>
<a href="/ajax/ajax/02-server">显示</a>
<div id="show"></div>
</body>
</html>
views视图的处理
def server02_views(request):
return HttpResponse("这是server02的响应内容")
js文件
// 创建异步对象
function createXhr() {
if (window.XMLHttpRequest) {
var xhr = new XMLHttpRequest();
//console.log(xhr);
console.log('浏览器支持: XMLHttpRequest')
} else {
var xhr = new ActiveXObject("Microsoft.XMLHTTP");
//console.log(xhr);
console.log('浏览器支持ActiveXObject("")')
}
return xhr
}
//创建 ajax 请求
function btnShow() {
//1.创建xhr 调用的函数返回值
var xhr = createXhr();
//2.创建请求
xhr.open("get", "/ajax/02-server", true);
//3.设置回调函数
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && xhr.status == 200) {
// 接收服务器响应的数据
var res = xhr.responseText;
document.getElementById("show").innerHTML = res;
}
};
//4. 发送请求
xhr.send(null);
}
效果展示
Ajax 异步请求:
a 标签跳转
Ajax GET请求 附带参数请求
请求路由的设置
url(r"03-ajax-get-params/$", views.getparams_views),
url(r"03-server/$", views.server03_views),
views.py 界面请求函数处理
def getparams_views(request):
return render(request, 'Ajax/03-ajax-get-params.html')
def server03_views(request):
# 接收前段传递过来的两个参数
name = request.GET['name']
age = request.GET['age']
# 响应数据
s = "姓名:%s,年龄%s" % (name, age)
return HttpResponse(s)
html和js中处理
<!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>Title</title>
<script>
// 创建异步对象
function createXhr() {
if (window.XMLHttpRequest) {
var xhr = new XMLHttpRequest();
//console.log(xhr);
console.log('浏览器支持: XMLHttpRequest')
} else {
var xhr = new ActiveXObject("Microsoft.XMLHTTP");
//console.log(xhr);
console.log('浏览器支持ActiveXObject("")')
}
return xhr
}
function btnShow() {
// 创建xhr
var xhr = createXhr();
// 创建请求(带参数)
var url = "/ajax/03-server?name=wangwc&age=30";
xhr.open("get", url, true);
// 设置回调参数
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && xhr.status == 200) {
document.getElementById("show").innerHTML = xhr.responseText;
}
};
// 发送请求
xhr.send(null);
}
</script>
</head>
<body>
<button onclick="btnShow()">显示</button>
<div id="show"></div>
</body>
</html>
传参效果
Ajax GET请求 实现简易注册示例
请求路由的设置
url(r"04-register/$", views.register_views),
url(r"04-checkuname/$", views.checkuname_views),
模型类示例 models.py 需要迁移设置数据库
from django.db import models
# Create your models here.
class Users(models.Model):
uname = models.CharField("用户名称", max_length=30)
upwd = models.CharField("用户密码", max_length=30)
uemail = models.EmailField("电子邮箱")
nickname = models.CharField("用户昵称", max_length=30)
views.py 界面请求函数处理,数据库和模型需要自己配置
def register_views(request):
return render(request, "Ajax/04-register.html")
def checkuname_views(request):
# 接受前段传递的参数
uname = request.GET['uname']
# 判断uname在User实体中是否存在[查询操作]
user = Users.objects.filter(uname=uname)
# 根据查询结果给出响应
if user:
return HttpResponse(1)
return HttpResponse(0)
# 用户注册处理
def reguser_views(request):
# 接收前段传递的数据
uname = request.GET["uname"]
upwd = request.GET["upwd"]
uemail = request.GET["uemail"]
nickname = request.GET["nickname"]
# 通过实体类实现增加操作(通过异常来处理增加失败的问题)
try:
Users.objects.create(uname=uname, upwd=upwd, uemail=uemail, nickname=nickname)
return HttpResponse(1)
except Ellipsis as ex:
print(ex)
return HttpResponse(0)
html和js中处理
<!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>Document</title>
<script>
// 创建异步对象
function createXhr() {
if (window.XMLHttpRequest) {
var xhr = new XMLHttpRequest();
//console.log(xhr);
console.log('浏览器支持: XMLHttpRequest')
} else {
var xhr = new ActiveXObject("Microsoft.XMLHTTP");
//console.log(xhr);
console.log('浏览器支持ActiveXObject("")')
}
return xhr
}
</script>
<script src="../../../static/js/jquery-1.11.3.js"></script>
<script>
$(function () {
/*
* 为 #uname 绑定 blur 事件
* */
$('#uname').blur(function () {
// 创建xhr
var xhr = createXhr();
// 创建请求 - /ajax/04-checkuname
var uname = $("#uname").val();
var url = '/ajax/04-checkuname?uname=' + uname;
xhr.open("get", url, true);
// 设置回调函数
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && xhr.status == 200) {
//$("#uname-tip").html(xhr.responseText);
if (xhr.responseText == "1") {
$('#uname-tip').html("The user name already exists")
} else {
$('#uname-tip').html("Available user name")
}
}
};
// 发送请求
xhr.send(null);
});
/*为btnReg 绑定事件完成注册*/
$("#btnReg").click(function () {
// 1 . 创建异步对象xhr
var xhr = createXhr();
// 2 创建请求
var uname = $("#uname").val();
var upwd = $("#upwd").val();
var uemail = $("#uemail").val();
var nickname = $("#nickname").val();
var url = "/ajax/04-reguser?uname="
+ uname + "&upwd="
+ upwd + "&uemail="
+ uemail + "&nickname="
+ nickname;
console.log(url);
xhr.open("get", url, true);
// 3.设置回调函数
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && xhr.status == 200) {
if (xhr.responseText == "1") {
alert("注册成功");
} else {
alert("注册失败");
}
}
};
//4.发送请求
xhr.send(null)
});
});
</script>
</head>
<body>
<div>
<p>
用户名称:
<input type="text" id="uname">
<span id="uname-tip"></span>
</p>
<p>
用户密码: <input type="password" id="upwd">
</p>
<p>
电子邮箱: <input type="email" id="uemail">
</p>
<p>
用户昵称: <input type="text" id="nickname">
</p>
<p>
<input type="button" value="注册" id="btnReg">
</p>
</div>
</body>
</html>