Ajax学习--Ajax的使用与案例
浏览器向网站发送请求时:
以URL和表单的形式提交
- GET
- POST
特点:提交时页面会刷新
除此之外,也可以基于Ajax向后台发送请求(页面不会刷新,只局部更新)
- 依赖jQuery
- 编写Ajax代码
$.ajax({ url:"发送的地址", type: "get", data:{ n1:123, n2:456 }, success:function(res){ console.log(res); } })
GET请求
新建myproject/app01/views/task.py
from django.shortcuts import render,HttpResponse
def task_list(request):
"""任务列表"""
return render(request, "task_list.html")
def task_ajax(request):
print(request.GET)
return HttpResponse("成功了")
修改myproject/myproject/urls.py
1.导入task
from app01.views import depart, pretty, user, admin, account, task
2.添加URL
#任务管理
path('task/list/', task.task_list),
path('task/ajax/', task.task_ajax),
新建myproject/app01/templates/task_list.html(基于doom绑定事件)
{% extends 'layout.html' %}
{% block content %}
<div class="container">
<h1>任务管理</h1>
<h3>示例1</h3>
<input type="button" value="点击" class="btn btn-primary" onclick="clickMe();">
</div>
{% endblock %}
{% block js %}
<script type="text/javascript">
function clickMe() {
$.ajax({
url: '/task/ajax/',
type: "get",
data: {
n1: 123,
n2: 456
},
success: function (res) {
console.log(res);
}
})
}
</script>
{% endblock %}
{% block js %}
{% endblock %}对应myproject/app01/templates/layout.html

myproject/app01/templates/layout.html添加任务管理

浏览器看下效果吧

值已经传过去了

后台输出

POST请求
修改myproject/app01/views/task.py
csrf_exempt可以免除在HTM中写CSRF
from django.shortcuts import render,HttpResponse
from django.views.decorators.csrf import csrf_exempt
def task_list(request):
"""任务列表"""
return render(request, "task_list.html")
@csrf_exempt
def task_ajax(request):
#GET请求
print(request.GET)
#POST请求
print(request.POST)
return HttpResponse("成功了")

修改myproject/app01/templates/layout.html
{% block js %}
<script type="text/javascript">
function clickMe() {
$.ajax({
url: '/task/ajax/',
type: "post",
data: {
n1: 123,
n2: 456
},
success: function (res) {
console.log(res);
}
})
}
</script>
{% endblock %}

浏览器访问测试


后台

对上面的Ajax代码进行优化: 基于jQuery绑定事件
修改myproject/app01/templates/task_list.html
{% extends 'layout.html' %}
{% block content %}
<div class="container">
<h1>任务管理</h1>
<h3>示例1</h3>
<input id="btn1" type="button" value="点击" class="btn btn-primary"/>
</div>
{% endblock %}
{% block js %}
<script type="text/javascript">
$(function () {
{# 页面框架加载完成之后代码自动执行 #}
bindBtn1Event();
})
function bindBtn1Event() {
$("#btn1").click(function () {
$.ajax({
url: '/task/ajax/',
type: "post",
data: {
n1: 123,
n2: 456
},
success: function (res) {
console.log(res);
}
})
})
}
</script>
{% endblock %}

ajax请求返回值
不会返回页面,一般返回JSON格式
修改myproject/app01/views/task.py
import json
from django.shortcuts import render,HttpResponse
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
def task_list(request):
"""任务列表"""
return render(request, "task_list.html")
@csrf_exempt
def task_ajax(request):
#GET请求
print(request.GET)
#POST请求
print(request.POST)
data_dict = {"status": True, 'data': [11,22,33,44]}
return HttpResponse(json.dumps(data_dict))
# json_string = json.dumps(data_dict)
# return HttpResponse(json_string)
# return JsonResponse(data_dict)

修改myproject/app01/templates/task_list.html
{% block js %}
<script type="text/javascript">
$(function () {
{# 页面框架加载完成之后代码自动执行 #}
bindBtn1Event();
})
function bindBtn1Event() {
$("#btn1").click(function () {
$.ajax({
url: '/task/ajax/',
type: "post",
data: {
n1: 123,
n2: 456
},
dataType: "JSON",
success: function (res) {
console.log(res);
console.log(res.status);
console.log(res.data);
}
})
})
}
</script>
{% endblock %}

浏览器查看下吧

实现后台接收输入框中的内容
修改myproject/app01/templates/task_list.html
{% extends 'layout.html' %}
{% block content %}
<div class="container">
<h1>任务管理</h1>
<h3>示例1</h3>
<input id="btn1" type="button" value="点击" class="btn btn-primary"/>
<h3>示例2</h3>
<input type="text" id="txtuser" placeholder="姓名">
<input type="text" id="txtAge" placeholder="年龄">
<input id="btn2" type="button" value="点击" class="btn btn-primary">
</div>
{% endblock %}
{% block js %}
<script type="text/javascript">
$(function () {
{# 页面框架加载完成之后代码自动执行 #}
bindBtn1Event();
bindBtn2Event();
})
function bindBtn1Event() {
$("#btn1").click(function () {
$.ajax({
url: '/task/ajax/',
type: "post",
data: {
n1: 123,
n2: 456
},
dataType: "JSON",
success: function (res) {
console.log(res);
console.log(res.status);
console.log(res.data);
}
})
})
}
function bindBtn2Event() {
$("#btn2").click(function () {
$.ajax({
url: '/task/ajax/',
type: "post",
data: {
name: $("#txtuser").val(),
age: $("#txtAge").val()
},
dataType: "JSON",
success: function (res) {
console.log(res);
console.log(res.status);
console.log(res.data);
}
})
})
}
</script>
{% endblock %}



假如前端代码过多,我们需要用更简单的方法批量处理
修改myproject/app01/templates/task_list.html
{% extends 'layout.html' %}
{% block content %}
<div class="container">
<h1>任务管理</h1>
<h3>示例1</h3>
<input id="btn1" type="button" value="点击1" class="btn btn-primary"/>
<h3>示例2</h3>
<input type="text" id="txtuser" placeholder="姓名">
<input type="text" id="txtAge" placeholder="年龄">
<input id="btn2" type="button" value="点击2" class="btn btn-primary">
<h3>示例3</h3>
<form id="form3">
<input type="text" name="user" placeholder="姓名">
<input type="text" name="age" placeholder="年龄">
<input type="text" name="email" placeholder="邮箱">
<input type="text" name="more" placeholder="介绍">
</form>
<input id="btn3" type="button" value="点击3" class="btn btn-primary">
</div>
{% endblock %}
{% block js %}
<script type="text/javascript">
$(function () {
{# 页面框架加载完成之后代码自动执行 #}
bindBtn1Event();
bindBtn2Event();
bindBtn3Event();
})
function bindBtn1Event() {
$("#btn1").click(function () {
$.ajax({
url: '/task/ajax/',
type: "post",
data: {
n1: 123,
n2: 456
},
dataType: "JSON",
success: function (res) {
console.log(res);
console.log(res.status);
console.log(res.data);
}
})
})
}
function bindBtn2Event() {
$("#btn2").click(function () {
$.ajax({
url: '/task/ajax/',
type: "post",
data: {
name: $("#txtuser").val(),
age: $("#txtAge").val()
},
dataType: "JSON",
success: function (res) {
console.log(res);
console.log(res.status);
console.log(res.data);
}
})
})
}
function bindBtn3Event() {
$("#btn3").click(function () {
$.ajax({
url: '/task/ajax/',
type: "post",
data: $("#form3").serialize(),
dataType: "JSON",
success: function (res) {
console.log(res);
console.log(res.status);
console.log(res.data);
}
})
})
}
</script>
{% endblock %}



这样,我们就学会了如何在浏览器页面不刷新的情况下,如何向后台提交数据

浙公网安备 33010602011771号