- ajax
往后台提交数据,form表单标签
js语言中封装的一个发送http请求的模块,xmlhttprequest对象,经过jquery的封装起名为ajax
AJAX 不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。
a.同步交互:客户端发出一个请求后,需要等待服务器响应结束后,才能发出第二个请求;
b.异步交互:客户端发出一个请求后,无需等待服务器响应结束,就可以发出第二个请求。
AJAX除了异步的特点外,还有一个就是:浏览器页面局部刷新
同步提交: 当点击提交后必须等待响应完成后才能继续操作网页
异步提交: 当点击提交后还可以继续操作网页中的其他内容,不用等待响应数据
def login(request): if request.method == \'GET\': # return render(request, \'login.html\') ret = render(request, \'login.html\') # 修改响应状态码 ret.status_code = 202 # return ret
ajax代码
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.error{
color:Red;
font-size: 12px;
}
</style>
</head>
<body>
<form action="" method="post">
用户名: <input type="text" name="username">
密码: <input type="password" name="password">
<input type="submit">
</form>
<hr>
用户名: <input type="text" id="uname">
密码: <input type="password" id="pwd">
<span class="error"></span>
<button id="btn">ajax提交</button>
</body>
<script src="{% static \'jquery.js\' %}"></script>
<script>
// ajax发送请求提交数据
$(\'#btn\').click(function () {
var uname = $(\'#uname\').val();
var pwd = $(\'#pwd\').val();
$.ajax({
{#url:\'http://127.0.0.1:8001/ajax_login/\', // 请求路径 绝对路径 #}
url:\'/ajax_login/\', // 请求路径 相对路径
type:\'post\', // 请求方法,小写
{#data:{a:1,b:2}, // 请求携带数据#}
data:{username:uname, password:pwd},
// 接受请求成功之后的响应数据的,res接受到的就是响应数据,
// ajax会判断响应状态码,当状态码为2xx,3xx等时,那么表示请求和响应是正常的,那么ajax会将响应数据进行加工,并传递给success对应的匿名函数作为他的参数,也就是我们下面定义的res形参
success:function (res) {
console.log(\'success>>>>\',res);
{#alert(\'登录成功!!!!恭喜恭喜!!!\');#}
location.href = \'/home/\' //访问home路径,使用的浏览器的机制
//if (res === \'okk\'){
// alert(\'登录成功!!!!恭喜恭喜!!!\');
//}else {
// $(\'.error\').text(\'用户名或者密码有误!!!\');
//}
},
// 当状态码为4xx(请求错误),5xx(服务端错误)等时,那么ajax会加工响应数据并传递给error对应的函数
error:function (error) {
console.log(\'error>>>>\',error);
if (error.status === 400){
alert(\'用户名或者密码有误!!\');
{#$(\'.error\').text(\'用户名或者密码有误!!!\');#}
}
}
});
})
</script>
</html>
视图代码
from django.shortcuts import render, redirect, HttpResponse # Create your views here. def login(request): if request.method == \'GET\': # return render(request, \'login.html\') ret = render(request, \'login.html\') # 修改响应状态码 # ret.status_code = 202 # return ret else: print(request.POST) username = request.POST.get(\'username\') password = request.POST.get(\'password\') if username == \'root\' and password == \'123\': return render(request, \'home.html\') return redirect(\'/login/\') # 默认使用的状态码就是302 def ajax_login(request): if request.method == \'GET\': return render(request, \'login.html\') else: print(\'ajax>>>>>\', request.POST) # ajax>>>>> <QueryDict: {\'username\': [\'xxx\'], \'password\': [\'ooo\']}> username = request.POST.get(\'username\') password = request.POST.get(\'password\') if username == \'root\' and password == \'123\': # HttpResponse默认状态码为200 return HttpResponse(\'okk\') # return render(request, \'home.html\') # return redirect(\'/login/\') else: ret = HttpResponse(\'not ok\') ret.status_code = 400 return ret def home(request): return render(request, \'home.html\')
urls.py
from django.conf.urls import url from django.contrib import admin from app01 import views urlpatterns = [ url(r\'^admin/\', admin.site.urls), url(r\'^login/\', views.login), url(r\'^ajax_login/\', views.ajax_login), url(r\'^home/\', views.home), ]