首页 > 其他分享 >django之AJAX组件

django之AJAX组件

时间:2022-12-26 23:35:26浏览次数:31  
标签:args ajax json django AJAX 组件 数据 页面

目录

Ajax组件

AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步的Javascript和XML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML)。ajax不是一门新的技术,而是一种使用现有标准的新方法。它本身又很多版本,我们目前学习的是jQuery版本(版本无所谓,本质一样就可以)。

功能简介:异步提交 局部刷新

优点:

不重新加载整个页面的情况下,可以跟服务器交换数据并更新部分网页内容。(客户是感觉不到的),只需要用户允许JavaScript在浏览器上执行。
1.AJAX使用JavaScript技术向服务器发送异步请求;
2.AJAX请求无需刷新整个页面
3.因为服务器响应内容不再是整个页面,而是页面中的部分内容,所以AJAX性能高;
4.两个关键点:异步请求,局部刷新

常见的场景

image

搜索引擎会根据用户输入的关键字,自动提示检索关键字。其实这里就使用了AJAX技术!当文件框发生了输入变化时,使用AJAX技术向服务器发送一个请求,然后服务器会把查询到的结果响应给浏览器,最后再把后端返回的结果展示出来。

这注册过程页面时没有刷新的,只是刷新页面中我们鼠标点击的局部位置,当请求发出后,浏览器还可以进行其他操作,无需等待服务器的响应。

基本语法

//2.给按钮绑定点击事件
$('#subBtn').click(function(){
    //1.先获取两个框里面的数据
    let v1Val=$('#d1').val();
    let v2Val=$('#d2').val();
    console.log(v1Val,v2Val)
    //发送ajax请求
    $.ajax({
        url:'', //后端地址,三种填写方式,与form标签得action一致
        type:'post',  //请求方式,默认也是get
        data:{'v1':viVal,'v2':v2Val}, // 发送数据
        success:function(args){
            // 后端返回结果之后自动触发args接收后端返回得数据
             $('#d3').val(args)                 }
    })
    })

使用ajax交互 那么后端返回的数据会被args接收 不再直接影响整个浏览器页面

后端
直接获取v1,v2,进行逻辑运算

Content-Type(数据编码格式)

1.urlencoded

ajax默认的编码格式、form表单默认也是
数据格式:xxx=yyy&uuu=ooo&aaa=kkk
dajango后端会自动处理到request.POST中

2.formdata

​ django后端针对普通的键值对还是处理到request.POST中,但是针对文件会处理到request.Field

3.application/json

form表单不支持 ajax可以
<script>
$('#d1').click(function)(){
    $.ajax({
        url:'',
        type:'post',
        data:JSON.stringify({'name':'kimi','age':18}),//千万要写真实的数据
        contentType:'application/json',
        success:funcion (args){
            alert(args)
        }
    })
}
</script>
   后端需要从request.body 中获取并自己处理json.loads(request.body),json自带解码功能

form表单只支持urlencoded和formdata两个数据格式,但ajax支持三种数据格式(urlencoded、formdata和application/json)。

ajax发送json格式数据

1.确保发送json对应的数据是json格式字符串
	data:JSON.stringify({})
2.修改数据编码格式(默认是urlencoded)
	contentType:'application/json'

ajax携带文件数据

<script>
	$('#d3').click(function(){
        //1.先产生一个FormData对象
        let myFormDataObj= new FormData();
        //2.往该对象中添加普通数据
        myFormDataObj.append('name','kimi');
        myFormDataObj.append('age','18');
        //3.往该对象中添加文件数据
        myFormDataObj.append('file',$('#d2')[0].files[0])
        //4.发送ajax请求
        $.ajax({
            url:'',
            type:'post',
            data:myFormDataObj,//ajax发送文件固定的两个配置
            contentType:false, //不用编码,django认识内置对象
            processData:false, //前端不做任何操作
            success:function(args){
                alert(args)
            }
        })
})
</script>

ajax补充说明

主要针对回调函数args接收到的响应数据

1.后端request.is_ajax()

​ 用于判断当前请求是否有ajax发出,有则true,否则是false

2.后端返回的三板斧都会被args接收不再影响整个浏览器页面

3.选择使用ajax做前后端交互的时候,后端一般返回的都是字典数据

user_dict = {'code':10000,'username':'大家都会阳的':'hobby':'哎呀'}

后端将字典序列化为json格式
1.use_data = json.dumps(user_dict)
2.from django.http import JsonResponse
   return JsonResponse(user_dict)
前端反序列化
1.前端正常序列化
    let userObj = JSON.parse(args);
    console.log(userObj)
    console.log(userObj.username)
2.直接打印就行,前端认识JsonResponse
    console.log(args)
    console.log(args)

​ ajax自动反序列化后端的json格式的bytes类型数据

 dataType:'json', //在ajax里面添加这个参数,无论你怎么序列化字典,都能识别出它是字典

标签:args,ajax,json,django,AJAX,组件,数据,页面
From: https://www.cnblogs.com/zhanglanhua/p/17007135.html

相关文章