首页 > 其他分享 >【10.0】Ajax之引入

【10.0】Ajax之引入

时间:2023-07-17 11:46:22浏览次数:36  
标签:10.0 请求 val args request Ajax 引入 POST

【一】Ajax简介

【1】精髓

精髓:异步提交/局部刷新

  • 动态获取用户名,实时跟后端确认并将结果展示给前端

【2】发送请求的方式

  • 向后端发送请求的方式
    • 浏览器地址直接url回车
      • GET请求
    • a标签的 href 属性
      • GET请求
    • form表单
      • GET请求/POST请求
    • Ajax
      • GET请求/POST请求

【3】简介

Ajax不是新的编程语言,而是一种使用现有标准的新方法(类比装饰器)

Ajax最大的优点就是不重新加载页面的情况下,可以与服务器交换数据并更新部分网页内容

这种特点给用户的感觉就是在不知不觉中完成了请求和响应过程

  • Ajax(Asynchronous JavaScript and XML)是一种用于创建动态网页的编程技术。

    • 它通过在网页上进行异步数据传输,实现了在不重新加载整个页面的情况下更新部分页面内容的能力。
  • Ajax的核心技术包括使用JavaScript和XMLHttpRequest对象与服务器进行数据交互,以及利用DOM(Document Object Model)来动态地更新页面。

  • 通过使用Ajax,网页可以在后台与服务器进行数据交换,并在不刷新整个页面的情况下,根据服务器返回的数据实时更新页面的某些部分。

  • 这种技术带来了很多好处,比如提高了用户体验、减少了网络流量和服务器负载,并使得开发人员能够创建更加交互和动态的网页应用程序。

  • 虽然Ajax最初是指Asynchronous JavaScript and XML,但如今已经不仅限于使用XML作为数据传输的格式,而是可以使用各种格式,如JSON(JavaScript Object Notation)。

  • 总结起来,Ajax是一种强大的前端开发技术,通过异步数据传输和动态页面更新,提供了更好的用户体验和交互性,广泛应用于现代Web应用程序的开发中。

【二】Ajax引入

【1】案例

  • 页面上有三个 input 框
    • 在前面两个框输入数字,点击按钮,朝后端发送Ajax请求
    • 在后端计算出结果,再返回给前端动态展示的第三个input框中
  • 要求
    • 整个过程页面不能刷新,也不许在前端计算

(1.0)普通版

  • 后端
from django.shortcuts import render, HttpResponse


def ab_ajax(request):
    if request.method == 'POST':
        # print(request.POST)  # <QueryDict: {'i1': ['3'], 'i2': ['4']}>
        num1 = request.POST.get('i1')  # 3 - 文本类型
        num2 = request.POST.get('i2')  # 4 - 文本类型
        # 强转类型并做运算
        sum = int(num1) + int(num2)
        # 返回数据
        return HttpResponse(sum)
    return render(request, 'ab_ajax.html')
  • html 页面
<script>
    // 先给按钮绑定点击事件
    $('#btn').click(function () {
        // 向后端发送Ajax请求
        $.ajax({
            // (1)指定发送后端的请求接口
            url: '',// 不写就是朝当前地址发送请求
            // (2)请求方式
            type: "post", // 不指定默认就是 get 全小写
            // (3)提交数据
            data: {'i1': $('#d1').val(), 'i2': $('#d2').val()},
            // (4)异步提交有一个回调函数 (异步回调机制)
            // 当后端返回结果的时候会自动触发,args 会自动接受后端传过来的结果
            success: function (args) {
                {#alert(args)#}
                // 通过DOM操作动态数据渲染到第三个 input 框中
                console.log(args) // string
                $('#d3').val(args)
            },
        })
    })
</script>

(2.0)升级版

  • 后端
from django.http import JsonResponse
from django.shortcuts import render, HttpResponse
import json


# Create your views here.
def ab_ajax(request):
    if request.method == 'POST':
        # print(request.POST)  # <QueryDict: {'i1': ['3'], 'i2': ['4']}>
        num1 = request.POST.get('i1')  # 3 - 文本类型
        num2 = request.POST.get('i2')  # 4 - 文本类型
        # 强转类型并做运算
        sum = int(num1) + int(num2)
        # 返回数据
        data = {
            "message": "success",
            "sum": sum,
        }
        # 需要将数据序列化进行传输
        return HttpResponse(json.dumps(data))
    return render(request, 'ab_ajax.html')
  • html 前端
<script>
    // 先给按钮绑定点击事件
    $('#btn').click(function () {
        // 向后端发送Ajax请求
        $.ajax({
            // (1)指定发送后端的请求接口
            url: '',// 不写就是朝当前地址发送请求
            // (2)请求方式
            type: "post", // 不指定默认就是 get 全小写
            // (3)提交数据
            data: {'i1': $('#d1').val(), 'i2': $('#d2').val()},
            // 参数 - 会自动反序列化 传过来的数据
            {#dataType:true,#}
            // (4)异步提交有一个回调函数 (异步回调机制)
            // 当后端返回结果的时候会自动触发,args 会自动接受后端传过来的结果
            success: function (args) {
                {#alert(args)#}
                // 通过DOM操作动态数据渲染到第三个 input 框中
                $('#d3').val(args)
            },
        })
    })
</script>

(3.0)升级

  • 后端
from django.http import JsonResponse
from django.shortcuts import render, HttpResponse
import json


# Create your views here.
def ab_ajax(request):
    if request.method == 'POST':
        # print(request.POST)  # <QueryDict: {'i1': ['3'], 'i2': ['4']}>
        num1 = request.POST.get('i1')  # 3 - 文本类型
        num2 = request.POST.get('i2')  # 4 - 文本类型
        # 强转类型并做运算
        sum = int(num1) + int(num2)
        # 返回数据
        data = {
            "message": "success",
            "sum": sum,
        }
        # 需要将数据序列化进行传输
        return JsonResponse(data)
    return render(request, 'ab_ajax.html')

  • html 前端
<body>

<input type="text" id="d1">+
<input type="text" id="d2">=
<input type="text" id="d3">
<p>
    <button id="btn">点我</button>
</p>

<script>
    // 先给按钮绑定点击事件
    $('#btn').click(function () {
        // 向后端发送Ajax请求
        $.ajax({
            // (1)指定发送后端的请求接口
            url: '',// 不写就是朝当前地址发送请求
            // (2)请求方式
            type: "post", // 不指定默认就是 get 全小写
            // (3)提交数据
            data: {'i1': $('#d1').val(), 'i2': $('#d2').val()},
            // 参数 - 会自动反序列化 传过来的数据
            {#dataType:true,#}
            // (4)异步提交有一个回调函数 (异步回调机制)
            // 当后端返回结果的时候会自动触发,args 会自动接受后端传过来的结果
            success: function (args) {
                {#alert(args)#}
                // 通过DOM操作动态数据渲染到第三个 input 框中
                console.log(args) // object
                // 经过 JsonResponse 处理过的数据传过来的是 object 对象
                // object 对象 可以直接 . 属性
                $('#d3').val(args.sum)
            },
        })
    })
</script>

</body>

【2】小结

(1)基本语法

<script>
    // 先给按钮绑定点击事件
    $('#btn').click(function () {
        // 向后端发送Ajax请求
        $.ajax({
            // (1)指定发送后端的请求接口
            url: '',// 不写就是朝当前地址发送请求
            
            // (2)请求方式
            type: "post", // 不指定默认就是 get 全小写
            
            // (3)提交数据
            data: {'i1': $('#d1').val(), 'i2': $('#d2').val()},
            
            // (4)异步提交有一个回调函数 (异步回调机制)
            // 当后端返回结果的时候会自动触发,args 会自动接受后端传过来的结果
            success: function (args) {
                {#alert(args)#}
                // 通过DOM操作动态数据渲染到第三个 input 框中
                console.log(args) // string
                $('#d3').val(args)
            },
        })
    })
</script>

(2)注意

  • 针对后端如果是用 HttpResponse 返回的数据,回调函数不会自动帮我们反序列化
  • 针对后端如果是用 JsonResponse 返回的数据,回调函数会自动帮我们反序列化

(3)HttpResponse 解决方式

  • 后端先进行序列化,再返回数据给前端
  • 前端加参数进行反序列化

标签:10.0,请求,val,args,request,Ajax,引入,POST
From: https://www.cnblogs.com/dream-ze/p/17559615.html

相关文章

  • js:http-vue-loader从浏览器直接引入vue文件
    docgithub:https://github.com/FranckFreiburger/http-vue-loaderindex.html<!doctypehtml><htmllang="en"><head><scriptsrc="https://cdn.bootcdn.net/ajax/libs/vue/2.6.14/vue.min.js"></script><s......
  • 什么是进程和线程? 为什么要引入线程? 进程和线程的区别?
    什么是进程和线程?为什么要引入线程?进程和线程的区别? 什么是进程和线程?什么是进程?进程是程序在某个数据集合上的一次运行活动(不仅包含正在运行的程序实体,并且包括这个运行的程序中占据的所有系统资源,比如说CPU、内存、网络资源等),也是操作系统进行资源分配和保护的基......
  • 【一】Ajax与异步编程之web服务端
    【一】Ajax与异步编程之web服务端Ajax属于客户端网络技术,属于js范畴。基于aiohttp模Ajax与异步编程之web服务端块构建一个提供http协议的web服务器,并准备数据给客户端请求使用。pipinstallaiohttppipinstallaiohttp_corsserver.pyfromaiohttpimportwebimporta......
  • 【三】Ajax与异步编程之数据传输格式ajax
    【三】Ajax与异步编程之数据传输格式ajax【1】什么是ajaxajax,一般中文称之为:"阿贾克斯",是英文“AsyncJavascriptAndXml”的简写译作:异步js和xml传输数据技术。ajax的作用:ajax可以让js代替浏览器向服务端程序发送http请求,与服务端进行数据通信,在用户不知道的情况下......
  • 【五】Ajax与异步编程之异步编程
    【五】Ajax与异步编程之异步编程【1】异步编程js默认是单线程运行的,这意味着两段代码不能同时运行,所以在同步代码执行过程中,代码是逐行地运行的。简单来理解就是:同步按你的代码顺序执行,异步不按照代码顺序执行,异步的执行效率更高。关于在javascript中异步编程的方式......
  • 【四】Ajax与异步编程之数据传输格式ajax同源策略和跨域方案
    【四】Ajax与异步编程之数据传输格式ajax同源策略和跨域方案【1】同源策略同源策略(ameoriginpolicy),是浏览器为了保护用户信息在服务端的安全的而设置一种安全机制。所谓的同源就是指代通信的两个地址(例如服务端接口地址与浏览器客户端页面地址)之间比较,是否协议、域名(IP)和......
  • 依赖注入-xml-引入外部属性文件
    尚硅谷Spring-31比较常见的引用外部属性的场景是引用mysql1.加入依赖<!--MySQL驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.30</version></dependency>&l......
  • AJAX请求,响应头有set-cookie但浏览器不能写入cookie问题解决!
    开幕雷击:AJAX就不是干这个ajax只有向服务器发送请求时带上cookie的功能可选。不存在ajax向服务器get的时候带回来cookie的功能。解决把AJAX代码改成原始的js代码来完成需求:正确的jsdocument.addEventListener('DOMContentLoaded',function(){document.querySelector('......
  • AJAX笔记
    第一章:原生AJAX1.1AJAX简介AJAX全称为AsynchronousJavaScriptAndXML,就是异步的JS和XML。通过AJAX可以在浏览器中向服务器发送异步请求,最大的优势:无刷新获取数据。AJAX不是新的编程语言,而是一种将现有的标准组合在一起使用的新方式。1.2XML简介XML可扩展标......
  • kubernetes之 pv、pcv、cm、secret引入
    第八部分pv、pcv、cm、secret引入pv、pvc如果pvc需要空间很多,pv空间不足以支持,那么生产的pod就会一致hang住,这就需要根据pvc容量,动态生成pv了。借助中间层StorageClass:针对尚有存储空间,还未做成PV的空间进行分类。需要restful接口,做强认证cm明文存储数据,信息容易泄露secret基于b......