AJAX

Ajax

  • AJAX(asynchronous Javascript And XML)

    异步的JavaScript和XML

  • 优点:

    • AJAX使用JavaScript技术向服务器发送异步请求
    • 在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容
    • 因为服务器响应的内容不再是整个页面,而是页面中的部分内容,所以AJAx性能高
    • 两个关键点:局部刷新,异步请求

案例

在前端页面上有三个输入框,实现前两个框内输入数字,朝后端发请求,在页面不刷新的情况下实现第三个框内为前两个数字的和

two_sum.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    {% load static %}
    <script src="{% static 'bootstrap/js/jquery.js' %}"></script>
</head>
<body>
<input type="text" id="t1"> + <input type="text" id="t2"> = <input type="text" id="t3">
<button id="s1">提交</button>

<script>
    $('#s1').on('click', function(){
            $.ajax({
        url: '',
        type: 'post',
        data: {'t1': $('#t1').val(), 't2': $('#t2').val()},
        success: function (data) {
            $('#t3').val(data)

        }
    })
    })
    
</script>
</body>
</html>

views.py

def two_sum(request):
    if request.method == 'POST':
        t1 = request.POST.get('t1')
        t2 = request.POST.get('t2')
        tsum = int(t1) + int(t2)
        return HttpResponse(tsum)
    return render(request, 'two_sum.html', locals())

AJAX传json格式数据

djang不会将前端传过来的json格式的数据解析,而是直接放到request.body中

json_bytes = request.body
json_str = json_bytes.decode('utf8')
json_dict = json.loads(json_str)

注意:

  • 指定contentType参数

    contentType:'application/json'

  • 要发送的数据,确保是json格式

    data: JSON.stringify({'username': 'qqqq', 'password': '123456'})

AJAX传文件

前端:需要利用内置对象Formdata,该对象既可以传普通的键值,也可以传文件

如何获取input获取用户上传文件的文件内容

  • 先通过jquery找到该标签
  • 将jquery对象转换成原生的js对象
  • 利用原生js对象的方法,直接获取文件内容
<script>
    $('#b1').on('click', function () {
        // 生成formdata对象
        var myFormData = new ForData();
        
        // 向对象中添加普通键值
        myFormData.append('username', $('#t1').val());
        myFormData.append('password', $('#t2').val());
        
        // 向对象中添加文件数据
        myFormData.append('myfile', $('#t3')[0].files[0]);
        
        $.ajax({
            url: '',
            type: 'post',
            data: myFormData;
            
            cententType:false,		// 不用编码,默认使用formdata自带编码,django能够识别该对象
            processData:false,		// 浏览器对数据不做处理,直接发送
            
            success: function (data) {
            	alert(data)
        }
        })
    })
</script>

注意:

  • 利用formdata对象,能够简单快速的传输数据,包括普通键值和文件
  • ajax中参数设置:
    • data: formdata对象
    • contentType: false
    • processData: false

contentType前后端传输数据编码格式

  • urlencode数据格式

    • form表单默认的提交数据的编码格式是urlencode数据格式

    • 数据格式:username=admin&password=123

    • django后端会将urlencode数据格式解析后打包给request.POST,用户从request.POST中获取数据

    • ajax默认的提交数据的格式也是urlencode

  • formdata数据格式

    • django后端会将formdata格式的数据解析后打包给request.FILES,而不是request.POST
  • 前后端交互数据格式的统一

    • 前后端在做数据交互的时候,一定要表明所发的数据是什么格式

序列化组件

  • 将用户表的数据查询出来,返回给前端
  • 返回给前端的是一个字典,字典中是数据的字段
from django.core import serializers


def ser(request):
    user_queryset = models.Userinfo.objects.all()
    res = serializers.serialize('jason', user_queryset)		# 序列化user_queryset, 格式为json
    return render(request, 'ser.html', locals())
posted @ 2019-10-28 21:17  油饼er  阅读(152)  评论(0编辑  收藏  举报