一、知识点

1.jquery的ajax请求写法

<script src="/static/js/jquery-1.12.4.min.js"></script>
<script type="text/javascript">
$(function(){
$.get('/areas',function(data){
//处理请求数据
})
$.post('/areas',{'num':1},function(data){
//处理请求返回数据
})
})
</script>

二、实例

1. app1/views.py

from django.shortcuts import render
from django.http import HttpResponse,JsonResponse
from project1.settings import MEDIA_ROOT #导入上传文件保存路径 或 from django.conf import settings
from app1.models import PicTest,AreaInfo #导入图片模型类 # /index
def index(request):
return render(request,'app1/index.html') # /areas 省市下拉联动展示页
def areas(request):
return render(request,'app1/areas.html') # /prov 处理ajax请求,返回所有省
def prov(request):
areas=AreaInfo.objects.filter(aParent__isnull=True)
prov=[]
for p in areas:
prov.append((p.id,p.atitle))
return JsonResponse({'data':prov}) #/city
def city(request, pid):
'''获取pid的下级地区的信息'''
# 1.获取pid对应地区的下级地区 #获取方法1
# area = AreaInfo.objects.get(id=pid)
# areas = area.areainfo_set.all() #获取方法2
areas = AreaInfo.objects.filter(aParent__id=pid) # 2.变量areas并拼接出json数据:atitle id
areas_list = []
for area in areas:
areas_list.append((area.id, area.atitle)) # 3.返回数据
return JsonResponse({'data': areas_list})

2. templates/app1/areas.html

<!DOCTYPE html>
<html>
<head>
<title>下拉表-省市联动</title>
</head>
{% load static %}
<!-- <script src="{% static 'js/jquery.js' %}"></script> --> <script src="/static/js/jquery.js"></script>
<script>
$(function(){
$.get('/prov',function(data){
res=data.data //【1】返回的数据
prov=$('#prov') //【2】得到省份的DOM位置 /*//【方法1】循环处理get请求返回的数据
for (i =0; i<res.length; i++) {
id=res[i][0] //【1】得到返回数据的ID
title=res[i][1] //【2】得到返回的标题
//【3】拼接option字段
option_str='<option value="'+id + '">'+ title+ '</option>'
prov.append(option_str) //【4】把数据逐个添加到省的下拉列表中
}*/ //【方法2】循环处理get请求返回的数据
$.each(res,function(index,item){
id=item[0]
title=item[1]
option_str='<option value="'+id + '">'+ title+ '</option>'
prov.append(option_str)
}) // 绑定prov下拉列表框的change事件,获取省下面的市的信息
$('#prov').change(function () {
// 发起一个ajax请求 /city,获取省下面市级地区的信息
// 获取点击省的id
prov_id=$(this).val()
$.get('/city'+prov_id, function (data) {
// 获取返回的json数据
res = data.data
// 获取city下拉列表框
city = $('#city')
// 清空city下拉列表框
city.empty().append('<option>---请选择市---</option>')
// 获取dis下拉列表框
dis = $('#dis')
// 清空dis下拉列表框
dis.empty().append('<option>---请选择县---</option>')
// 变量res数组,获取每一个元素:[地区id, 地区标题]
// 遍历取值添加到city下拉列表框中
$.each(res, function (index, item) {
id = item[0]
atitle = item[1]
option_str = '<option value="'+id + '">'+ atitle+ '</option>'
// 向city下拉列表框中追加元素
city.append(option_str)
})
})
}) // 绑定city下拉列表框的change事件,获取市下面的县的信息
$('#city').change(function () {
// 发起一个ajax请求 /dis,获取市下面县级地区的信息
// 获取点击市的id
city_id=$(this).val()
$.get('/dis'+city_id, function (data) {
// 获取返回的json数据
res = data.data
// 获取dis下拉列表框
dis = $('#dis')
// 清空dis下拉列表框
dis.empty().append('<option>---请选择县---</option>')
// 变量res数组,获取每一个元素:[地区id, 地区标题]
// 遍历取值添加到dis下拉列表框中
$.each(res, function (index, item) {
id = item[0]
atitle = item[1]
option_str = '<option value="'+id + '">'+ atitle+ '</option>'
// 向dis下拉列表框中追加元素
dis.append(option_str)
})
})
})
})
})
</script>
<body> <select id='prov'>
<option>下拉选择省</option>
</select>
<select id='city'>
<option>下拉选择市</option>
</select>
<select id='dis'>
<option>下拉选择县</option>
</select> </body>
</html>

3. app1/urls.py

from django.contrib import admin
from django.urls import path,re_path
from app1 import views urlpatterns = [
path('index/', views.index), path('areas', views.areas), # 省市县下拉选择联动
path('prov/',views.prov), # ajax请求处理页,返回所有省
path('city<pid>',views.city), # ajax请求处理页,返回所有市
path('dis<pid>',views.city), # ajax请求处理页,返回所有县,因为和市所用过程相同,所以使用同一个处理函数city
]

附件:setting.py设置

LANGUAGE_CODE = 'zh-hans'#en-us
TIME_ZONE = 'Asia/Shanghai'#UTC
USE_I18N = True
USE_L10N = True
USE_TZ = True # 静态Url设置
STATIC_URL = '/static/'
# 静态文件设置
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')] # 设置上传文件的保存目录
MEDIA_ROOT=os.path.join(BASE_DIR,"static/media")

效果:http://localhost:8000/areas

Django(二十)下拉列表-省市联动实例:jquery的ajax处理前端的更多相关文章

  1. 自己编写的仿京东移动端的省市联动选择JQuery插件

    概述 什么是插件,插件就是即插即用叫插件,很少的配置,很少的代码就可以用都项目里,之所以做这个插件,是因为做了一个省市区的联动,其他项目如果要用怎么办,难道在ctrl+c,ctrl+v?那样做太low ...

  2. 二十五、【开源】EFW框架Winform前端开发之强大的自定义控件库

    回<[开源]EFW框架系列文章索引>        EFW框架源代码下载V1.2:http://pan.baidu.com/s/1hcnuA EFW框架实例源代码下载:http://pan ...

  3. 二十四、【开源】EFW框架Winform前端开发之项目结构说明和调试方法

    回<[开源]EFW框架系列文章索引>        EFW框架源代码下载V1.2:http://pan.baidu.com/s/1hcnuA EFW框架实例源代码下载:http://pan ...

  4. jquery中ajax 从前端到后端 完整过程解析

    几个原则: 1.get方式访问浏览器时,常加参数缘由: GET访问浏览器是等幂的,就是一个相同的URL只有一个结果[相同是指整个URL字符串完全匹配],所以第二次访问的时候如果 URL字符串没变化,浏 ...

  5. Web 开发人员和设计师必读文章推荐【系列二十九】

    <Web 前端开发精华文章推荐>2014年第8期(总第29期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

  6. Web 前端开发人员和设计师必读文章推荐【系列二十八】

    <Web 前端开发精华文章推荐>2014年第7期(总第28期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

  7. Web 前端开发人员和设计师必读精华文章【系列二十六】

    <Web 前端开发精华文章推荐>2014年第5期(总第26期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

  8. jQuery实例——jQuery实现联动下拉列表查询框--转http://www.cnblogs.com/picaso/archive/2012/04/08/2437442.html#undefined

    jQuery实例--jQuery实现联动下拉列表查询框   在查询与列表显示的时候经常用到联动列表显示,比如一级选项是国家,二级选项是省,三级是市,这样的联动是联系的实时导出的,比如你不可能选择了四川 ...

  9. Django(十二)视图--利用jquery从后台发送ajax请求并处理、ajax登录案例

    一.Ajax基本概念 [参考]:https://www.runoob.com/jquery/jquery-ajax-intro.html 异步的javascript.在不全部加载某一个页面部的情况下, ...

随机推荐

  1. 2020qbxt D1T3 停车

    嗯... 题目: [问题描述] 市中心有一个环形的停车场,编号1到n,现在有m个车要停,停在每个位置会有不同的费用.为了方便,不允许两辆车停在相邻的位置,请问停好所有车的最小花费是多少? [输入格式] ...

  2. MYSQL数据库索引、事务。

    =============================================================================================== inno ...

  3. 计算机二级-C语言-程序设计题-190112记录-结构体的遍历和结构体的数据的交换处理,文件的操作。

    //程序设计题:学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把分数低的学生数据放在b所指的数组中,注意:分数最低的学生可能不止一个,函数返回 ...

  4. MyBatis-Plus学习笔记(2):代码生成器

    AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity.Mapper.Mapper XML.Service.Control ...

  5. 吴裕雄--天生自然Python Matplotlib库学习笔记:matplotlib绘图(2)

    import numpy as np import matplotlib.pyplot as plt fig = plt.figure() fig.subplots_adjust(bottom=0.0 ...

  6. 线程池ExecutorService的使用及其正确关闭方法

    创建一个容量为5的线程池 ExecutorService executorService = Executors.newFixedThreadPool(5); 向线程池提交15个任务,其实就是通过线程 ...

  7. SpringBoot学习笔记(二)——Springboot项目目录介绍

    官网生成SpringBoot项目 使用官网(https://start.spring.io/)生成一个Maven构建的的SpringBoot项目,下载下来的文件是这个样子的. 导入到IDEA中 为了查 ...

  8. JShell的使用

    JShell脚本工具是JDK9的新特性 启动JShell工具,在DOS命令行直接输入JShell命令.(如下例) 这里我们用Hello,World举例: 结果显示是正确的. 这里再举一个例子: 结果可 ...

  9. 计算机基础,Python - 回调函数,使用装饰器注册回调函数

    1. 参考: https://en.wikipedia.org/wiki/Callback_(computer_programming) https://developer.mozilla.org/e ...

  10. 吴裕雄--天生自然TensorFlow2教程:误差计算

    import tensorflow as tf y = tf.constant([1, 2, 3, 0, 2]) y = tf.one_hot(y, depth=4) # max_label=3种 y ...