*Django中的Ajax 纯js的书写样式1

news2024/9/24 17:20:10

搭建项目

建立一个Djano项目,建立一个app,建立路径,视图函数大多为render,

Ajax的创建

urls.py

path('index/',views.index),
path('index2/',views.index2),

views.py

def index(request):
    return render(request,'01.html')
def index2(request):
    return render(request,'02.html')

01.html

readyState共有五个返回值【0 1 2 3 4】,

0:ajax对象创建成功

1:准备请求结束

2 3 4:服务器接收请求,服务器解析,服务器响应请求【这三步都在监听回调函数中触发】

除了服务器响应外,还要确认资源

200:成功访问【201,204等】

300:服务器有多个可以响应客户端请求的资源【304,307等】

404:访问资源不存在【400,401等】

500: 服务器奔溃【505等】

<body>
    <button>send</button>
    <script>
        document.querySelector('button').onclick=function(){
            // 1 创建ajax对象
            var xhr=new XMLHttpRequest(); //0
            console.log('new',xhr.readyState);
            // 2 准备请求xhr.open('get/post','地址',是否异步);
            xhr.open('get','/index2/',true);// 1
            console.log('get',xhr.readyState);
            // 3 发送请求
            xhr.send();
            // 4 监听回调函数
            xhr.onreadystatechange=function(){
                // 判断状态执行到哪一步了 0 1 2 3 4
                console.log('函数',xhr.readyState);//打印 2 3 4
                if(xhr.readyState === 4){
                    console.log(xhr.status);
                    if(xhr.status === 200){
                        // 响应数据
                        console.log(xhr.response) //返回的数据
                    }
                }
            }
        }
    </script>
</body>

执行python manage.py runserver

浏览器点击send,看控制台是否打印【02.html如下显示】

传递参数【get/post】

urls.py

#传递参数get/post
path('p/',views.p),#send
path('p2/',views.p2),#back

views.py

注意post与get请求

def p(request):
    return render(request,'03.html')
def p2(request):
    if request.method == 'POST':
        print('进入post请求')
        user = request.POST.get('name')
        pwd = request.POST.get('pwd')
        print(user,pwd)
        return render(request, '04.html', {'name': user, 'password': pwd})
    print('进入get请求')
    user=request.GET.get('name')
    pwd=request.GET.get('pwd')
    return render(request,'04.html',{'name':user,'password':pwd})

03.html

get请求大致不变【url携带参数】

post请求必须携带参数,所以参数是放在data中,并且要避免csrf-token的验证,给请求头除了原本的'Content-type'还要加上csrf的验证,参数直接由send方法发送

转义字符是英文输入法下的 ~ 键

<body>
{% csrf_token %}
用户名:<input type="text"><br>
密码:<input type="password">
<button id="login">send</button>
<script>
    document.querySelector('button').onclick=function (){
        var name=document.querySelector('input[type=text]').value
        var pwd=document.querySelector('input[type=password]').value
        console.log(name,pwd)

        var xhr=new XMLHttpRequest();

        {#get请求#}
        {#var urls=`/p2/?name=${ name }&pwd=${ pwd } `{# `在笔记本tab上面的那个键 #}
        {#xhr.open('get',urls,true)#}
        {#xhr.send()#}

        {#post请求#}
        xhr.open('post','/p2/',true)
        var csrf=document.querySelector('input[type=hidden]').value
        data=`&${ name }&pwd=${ pwd }`

        xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded;charset=utf-8')
        xhr.setRequestHeader('X-CSRFToken', csrf);
        xhr.send(data)

        xhr.onreadystatechange=function (){
            console.log(xhr.status)
            console.log(xhr.readyState)
            if(xhr.readyState === 4){
                if(xhr.status === 200){
                    console.log(xhr.response)
                }
            }
        }
    }
</script>
</body>

04.html

<body>
用户名{{ name }}
密码{{ password }}
</body>

异步

open的第三个参数

预留加载位置【例如网络不佳情况下的图片加载失败】,还能执行其它函数

<body>
    <script>
        // 同步
        {#var str="hello world!"#}
        {#for(var i=0;i<100;i++){#}
        {#    console.log(i)#}
        {# } #}
        {#console.log(str)#}
        // 异步
        var str2='hello world2'
        var xhr=new XMLHttpRequest()
        xhr.open('get','/index2/',true)
        xhr.send()
        {#代码跳过该函数,向下执行 ,异步加载要请求的  #}
        xhr.onreadystatechange=function (){
            if(xhr.readyState === 4){
                if(xhr.status === 200){
                    console.log(xhr.response)
                }
            }
        }
        for(var i=0;i<100;i++){
            console.log(i)
        }
        console.log(str2)
    </script>
</body>

获取与解析本地Json

建立json文件

{
  "total": 4,
  "data": [
    {
      "name": "三国演义",
      "category": "文学",
      "desc": "一个军阀混战的年代"
    },{
      "name": "三国演义2",
      "category": "文学2",
      "desc": "一个军阀混战的年代2"
    }
  ],
  "obj": {"adf": "adf"}
}

Json文件中必需使用双引号,最后一个数据不加逗号,比如在data中的列表中第一个字典,最后一行数据不能加逗号否则报Uncaught SyntaxError: Expected double-quoted property name in JSON...

urls.py

#ajax获取本地json数据-解析显示页面
path('gjson/', views.Jsond, name='gjson'),
path('huoqu/',views.huoqu),

views.py

def huoqu(request):
    return render(request,'06.html')

def Jsond(request):#报错
    with open('static/data.json', 'r') as json_file:
        data = json.load(json_file)
    response = JsonResponse(data)
    # 设置X-Content-Type-Options头部
    response['X-Content-Type-Options'] = 'nosniff'
    return response

'X-Content-Type-Options':nosniff确保浏览器按照指定的选项来处理响应的内容类型,以提高安全性。

不加报ncaught SyntaxError: Unexpected token 'o', "nosniff" is not valid JSON

json也可以写为这样,不过要导入JsonResponse

from django.http import JsonResponse

def Jsond(request):#JsonResponse(json文件)
    with open('static/data.json', 'r') as json_file:
        data = json.load(json_file)

    return JsonResponse(data)

06.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        h3{
            color:orange;
        }
    </style>
</head>
<body>
    <button id="btn">click</button>
    <ul>
{#       将json数据插入#}

    </ul>
    <script>
        document.getElementById('btn').onclick=function (){
            // 清空ul
            document.querySelector('ul').innerHTML=''
            var xhr=new XMLHttpRequest()
            xhr.open('get','/static/data.json')
            xhr.send()
            xhr.onreadystatechange=function (){
                console.log(xhr.status)
                if(xhr.readyState === 4){
                    if(xhr.status === 200){
                        {#console.log(xhr.response) //字符串#}
                        var obj = JSON.parse(xhr.response);
                        {#console.log(obj)#}
                        var arr=obj.data
                        var str=''
                        for(var i=0;i<arr.length;i++){
                            console.log(arr[i].name)
                            {#console.log(arr[i].category)#}
                            {#console.log(arr[i].desc)#}
                            {#方法1 创建li标签#}
                            {#var lis=document.createElement('li')#}
                            {#lis.innerHTML=`<h3>${arr[i].name}</h3><p>${ arr[i].desc}</p>`#}
                            {##}
                            {#方法1 追加给ul#}
                            {#document.querySelector('ul').appendChild(lis)#}
                            {#方法2 字符串拼接#}

                            str+=`<li>
                                        <h3>书名:${arr[i].name}</h3>
                                        <p>简介:${ arr[i].desc}</p>
                                    </li>`;
                        }
                        console.log(str)
                        document.querySelector('ul').innerHTML=str
                    }
                }
            }
        }
    </script>
</body>
</html>

 将获取到的json数据传入li,加进先前准备好的ul中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1134187.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java集合类面试二十三】、List和Set有什么区别?

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;List和Set有什么区别&am…

【Java集合类面试二十五】、有哪些线程安全的List?

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;有哪些线程安全的List&a…

Controller接收Postman的raw参数时,属性值全部为空

Controller接收Postman的raw参数时&#xff0c;属性值全部为空 情景再现 在进行业务代码的编写过程中&#xff0c;使用Postman等工具调用Controller接口时&#xff0c;发现属性值全部为空后端代码如下&#xff1a; Requset对象为&#xff1a; public class QuerySkuRequest …

十八、字符串(4)

本章概要 扫描输入 Scanner 分隔符用正则表达式扫描 StringTokenizer 类 扫描输入 到目前为止&#xff0c;从文件或标准输入读取数据还是一件相当痛苦的事情。一般的解决办法就是读入一行文本&#xff0c;对其进行分词&#xff0c;然后使用 Integer、Double 等类的各种解析方…

【Java】电子病历编辑器源码(云端SaaS服务)

电子病历编辑器极具灵活性&#xff0c;它既可嵌入到医院HIS系统中&#xff0c;作为内置编辑工具供多个模块使用&#xff0c;也可以独立拿出来&#xff0c;与第三方业务厂商展开合作&#xff0c;为他们提供病历书写功能&#xff0c;充分发挥编辑器的功能。 电子病历基于云端SaaS…

机器学习之查准率、查全率与F1

文章目录 查准率&#xff08;Precision&#xff09;&#xff1a;查全率&#xff08;Recall&#xff09;&#xff1a;F1分数&#xff08;F1 Score&#xff09;&#xff1a;实例P-R曲线F1度量python实现 查准率&#xff08;Precision&#xff09;&#xff1a; 定义&#xff1a; …

ORB-SLAM安装过程遇到问题记录整理

一、ORB-SLAM2 1.c error: ‘decay_t’ is not a member of ‘std’ 如下图所示&#xff1a; 解决方法&#xff1a; 修改 ORB_SLAM的 CMAKELIST.txt文件&#xff0c; 将set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdc11") 修改为 set(CMAKE_CXX_STANDARD 14) 2…

R语言的极值统计学、分位数回归、机器学习方法

受到气候变化、温室效应以及人类活动等因素的影响&#xff0c;自然界中极端高温、极端环境污染、大洪水和大暴雨等现象的发生日益频繁&#xff1b;在人类社会中&#xff0c;股市崩溃、金融危机等极端情况也时有发生&#xff1b;今年的新冠疫情就是非常典型的极端现象。研究此类…

2017年亚太杯APMCM数学建模大赛B题喷雾轨迹规划问题求解全过程文档及程序

2017年亚太杯APMCM数学建模大赛 B题 喷雾轨迹规划问题 原题再现 喷釉工艺用喷釉枪或喷釉机在压缩空气下将釉喷入雾中&#xff0c;使釉附着在泥体上。这是陶瓷生产过程中一个容易实现自动化的过程。由于不均匀的釉料在烧制过程中会产生裂纹&#xff0c;导致工件报废&#xff0…

065:mapboxGL在一个图层中随机添加100个标记(marker)

第065个 点击查看专栏目录 本示例的目的是演示如何在vue+mapbox中在一个图层上随机添加100个标记(marker)。要添加多个标记,或者向交互式 Web 或移动地图添加标记,通常必须提供 GeoJSON 格式或矢量切片集的点数据。 您可以在运行之前将数据添加到地图样式,方法是使用 Mapb…

python html(文件/url/html字符串)转pdf

安装库 pip install pdfkit第二步 下载程序wkhtmltopdf https://wkhtmltopdf.org/downloads.html 下载7z压缩包 解压即可, 无需安装 解压后结构应该是这样, 我喜欢放在项目里, 相对路径引用(也可以使用绝对路径, 放其他地方) import pdfkit# 将 wkhtmltopdf.exe程序 路径 p…

STM32F4VGT6-DISCOVERY:uart1驱动

对于这款板子&#xff0c;官方并没有提供串口例程&#xff0c;只能自行添加。 一、PA9/PA10复用成串口1功能不可用 驱动测试代码如下&#xff1a; main.c: #include "main.h" #include <stdio.h>void usart1_init(void) {GPIO_InitTypeDef GPIO_InitStruct…

题目 1120: C语言训练-“水仙花数“问题2python详解)——练气三层后期

✨博主&#xff1a;命运之光 &#x1f984;专栏&#xff1a;算法修炼之练气篇&#xff08;C\C版&#xff09; &#x1f353;专栏&#xff1a;算法修炼之筑基篇&#xff08;C\C版&#xff09; &#x1f352;专栏&#xff1a;算法修炼之练气篇&#xff08;Python版&#xff09; ✨…

基于 nodejs+vue城市轨道交通线路查询系统mysql

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

.NET、VUE利用RSA加密完成登录并且发放JWT令牌设置权限访问

后端生成公钥私钥 使用RSA.ToXmlString(Boolean) 方法生成公钥以及私钥。 RSACryptoServiceProvider rSA new(); string pubKey rSA.ToXmlString(false);//公钥 string priKey rSA.ToXmlString(true);//私钥 后端将生成的公钥发送给前端 创建一个get请求&#xff0c;将…

关于网络安全运营工作与安全建设工作的一些思考

以下内容是个人成长过程中对于网络安全运营工作的理解和思考&#xff0c;希望通过这篇文章帮助大家更好的去做安全运营体系化建设&#xff0c;开始吧&#xff01; 文章目录 一、网络安全运营是什么&#xff1f;二、网络安全运营建设阶段第一阶段&#xff1a;设备限制阶段第二阶…

思维导图软件 ConceptDraw MINDMAP mac中文特色介绍

ConceptDraw MINDMAP mac是一款思维导图绘制软件&#xff0c;它可以帮助用户快速创建各种类型的思维导图&#xff0c;如组织结构图、流程图、概念图和UML图等。该软件具有直观的界面和简单易用的操作方式&#xff0c;使得用户能够轻松地创建复杂的思维导图。此外&#xff0c;它…

【Java集合类面试二十六】、介绍一下ArrayList的数据结构?

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;介绍一下ArrayList的数据…

C++ list 模拟实现

目录 1. 基本结构的实现 2. list() 3. void push_back(const T& val) 4. 非 const 迭代器 4.1 基本结构 4.2 构造函数 4.3 T& operator*() 4.4 __list_iterator& operator() 4.5 bool operator!(const __list_iterator& it) 4.6 T* operator->…

douyin ios 六神参数学习记录

玩那么久安卓了&#xff0c;也终于换一换ios终端分析分析&#xff0c;还是熟悉的x-gorgon&#xff0c;x-argus&#xff0c;x-medusa那些参数。 随便抓个抖音 ios版本的接口&#xff1a; 像评论接口&#xff1a; https://api26-normal-hl.amemv.com/aweme/v2/comment/list/?…