Python之Ajax

Ajax简介

Ajax即Asynchronous Javascript And XML(异步JavaScript和XML),Ajax 不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的Web应用程序的技术。

Ajax最重要的功能是通过js对浏览器异步提交请求,局部刷新页面。

XML文本标记语言(类似于HTML):主要用来书写配置文件,并且在一些框架中充当前端页面的编写语言(odoo框架)。

前端一些能够发送网络请求的简单方法如下:

  • a——get请求
  • form表单——get请求、post请求
  • Ajax——get请求、post请求

而关于同步与异步的理解可以为如下:

  • 同步:提交任务之后原地等待任务结果期间不做任何事。
  • 异步:提交任务之后不原地等待任务结果,等任务产生结果通过异步回调机制。

能够实现ajax效果的书写方式有很多,比如:原生js代码、jQuery封装代码、组件框架代码等。我们使用的是较为简单常见的jQuery封装版本。

Ajax的基本语法与使用

要使用jQuery封装的Ajax首先需要导入jquery,推荐的方法有两种:

  1. 在使用bootCDN https://www.bootcdn.cn/jquery/
    这是一免费的cdn提供网站。
    Python之Ajax

相关代码

<head>
	<meta charset="UTF-8">
	<title>Title</title>
	<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
</head>

优点:无需将文件下载到本地,同时操作相对简单便捷。
缺陷:必须在有网络的情况下才能正常使用。

  1. 本地导入 jQuery.js
    可在jQuery官网下载对应的jQuery https://jquery.com/download/
    Python之Ajax

相关代码

<head>
	<meta charset="UTF-8">
	<title>Title</title>
	<script type="text/javascript" src="本地jquery地址/jquery文件名.js"></script>
</head>

优点:可以直接在本地进行操作,无需网络的连接。
缺陷:必须先将文件下载导本地。

Ajax基本语法

$.ajax({
    url:'',  //控制提交地址,规律与form中的action一致
    type:'',  //控制请求方式
    data:'',  //发送的数据
    success:function(args){}  //异步回到函数,args为回调的数据
})

ps:发送的数据一定要保证与数据类型的一致性。

实例之两数相加局部刷新结果

前端:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
    <input type="text" id="i1">+<input type="text" id="i2">=<input type="text" id="i3">
    // 输入数的input框id分别为i1、i2,结果的input框id为i3
    <button id="d1">求和</button>
</body>
<script>
    $('#d1').on('click', function () {
        i1Val = $('#i1').val();
        i2Val = $('#i2').val();
        $.ajax({
            url:'',
            type:'post',
            data:{'i1':i1Val,'i2':i2Val},
            success:function (args) {
                $('#i3').val(args)
            }
        })
    })
</script>
</html>
后端之view.py:
def ab_ajax(request):
    if request.is_ajax():  # 判断当期请求是否是ajax请求
        if request.method == 'POST':
            i1 = request.POST.get('i1')
            i2 = request.POST.get('i2')
            res = int(i1) + int(i2)  #注:post取得的数据都为str类型,运算需对其进行类型转化
            return HttpResponse(res)
    return render(request, 'ab_ajax.html')
路由urls.py:
urlpatterns = [
    url(r'^ab_ajax/', views.ab_ajax, name='ab_ajax')
]

运行结果

Python之Ajax

其他部分常用参数的补充

contentType(传输的数据格式)

前后端数据传输的格式主要有以下:

application/x-www-form-urlencoded:只能上传键值对,并且键值对都是间隔分开的。

multipart/form-data:既可以上传文件等二进制数据,也可以上传表单键值对,只是最后会转化为一条信息。

application/json:作为请求头告诉服务端消息主体是序列化的JSON字符串,除了版本低的IE浏览器,其他的基本都支持。

text/plain:将文件设置为纯文本的形式,浏览器在获取导这种文件时并不会对其进行处理。

朝后端发送数据的时候针对不同的方式后端有不同的处理措施。

dataType(数据类型)

当其参数指定为JSON:

django后端如果使用JsonResponse给回调函数返回json格式字符串,回调函数会自动反序列化成js中的自定义对象。

如果不使用JsonResponse而是自己通过json模块序列化的数据,回调的函数接收到之后不会自动反序列化。

上一篇:合并两个有序数组


下一篇:计算方法 - 求近似值