ajax详解
- 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), ]

浙公网安备 33010602011771号