AJAX
一,AJAX简介AJAX,(Asynchronous Javascript And XML),也就是异步的Javascript和XML。使用JavaScipt语言服务器进行交互。 AJAX最大的优点实在不重新加载整个页面的情况下,可以与服务器交换数据并且部分更新网页内容。 ps: 同步交互:客户端发出一个请求后,需要等待服务器响应结束后,才能发出第二个请求。 异步交互:客户端发出一个请求后,无需等待服务器响应结束,姐可以发出第二个请求。 二,AJAX基本操作介绍页面输入两个整数,通过AJAX传输到后端计算出结果并返回。 test.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> <link href="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script> </head> <body> <input type="text" id="i1"> + <input type="text" id="i2"> = <input type="text" id="i3"> <button id="b1" class="button">Ajax Test</button> <script> {#生成id是‘b1’的jQuery对象,触发点击事件#} $(‘#b1‘).click(function () { $.ajax({ {#提交地址,默认是当前后端#} url:‘‘,{#提交的方式#} type:‘POST‘,{#提交的数据是id为i1的对象的value值和id为i2的对象的value值#} data:{i1:$(‘#i1‘).val(),i2:$(‘#i2‘).val()},{#回调函数,向前端发出指令#} success:function (data) { $(‘#i3‘).val(data) } }) }) </script> </body> </html> view.py: def test(request): if request.method == ‘POST‘: res1 = request.POST.get(‘i1‘) res2 = request.POST.get(‘i2‘) res3 = int(res1)+int(res2) # 向前端传入参数 return HttpResponse(res3) return render(request,‘test.html‘) ?ps:ajax默认的数据数据的编码给是也是urlencoded。 ? 三,JSON介绍一:JSON指的是JavaScript对象表示法(JavaScript?Object?Notation)。 二:JSON是轻量级文本传输交换格式。 三:JSON独立于语言。 四:JSON具有自我描述性,更易理解。 JSON对象和字符串转换的两个方法: 方法一:用于将一个JSON字符串转化为JavaScript对象(json只认双引的字符串格式) JSON.parse(‘{"name":"Howker"}‘); 方法二:用于将JavaScript值转化为JSON字符串。 JSON.stringify({"name":"Tonny"}) ? 四,其他案例ajax传输json格式数据: test.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> <link href="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script> </head> <body> <input type="text" id="i1"> + <input type="text" id="i2"> = <input type="text" id="i3"> <button id="b1" class="button">Ajax Test</button> <script> $(‘#b1‘).click(function () { $.ajax({ url:‘‘,// url参数可以不写,默认就是当前页面打开的地址 type:‘post‘,{#告诉django你传入的data数据是什么格式的#} contentType:‘application/json‘,data:JSON.stringify({‘name‘:‘jason‘,‘hobby‘:‘study‘}),success:function (data) { alert(data); $(‘#i3‘).val(data) } }) }) </script> </body> </html> views.py: def test(request): if request.method == ‘POST‘: # 取出json数据格式的方式 data = request.body res = str(data,encoding=‘utf-8‘) name = json.loads(res).get(‘name‘) return HttpResponse(name) return render(request,‘test.html‘) ? ajax传输文件: test.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> <link href="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script> </head> <body> <input type="file" id="i1" name="myfile"> <input type="text" id="‘i2"> <button id="b1" class="button">Ajax Test</button> <script> $(‘#b1‘).click(function () { {#定义要给变量名formdata来存储new FormData对象#} let formdata = new FormData(); // FormData对象不仅仅可以传文件还可以传普通的键值对 formdata.append(‘name‘,‘jason‘); // 获取input框存放的文件 //$(‘#i1‘)[0].files[0] formdata.append(‘myfile‘,$(‘#i1‘)[0].files[0]); //将jQuery对象转化为js对象 $.ajax({ url:‘‘,type:‘post‘,data:formdata,// ajax发送文件需要修改两个固定的参数 processData:false,// 告诉浏览器不要处理我的数据 contentType:false,// 不要用任何的编码,就用我formdata自带的编码格式,django能够自动识别改formdata对象 // 回调函数 success:function (data) { alert(data) } }) }); </script> </body> </html> views.py: from django.shortcuts import HttpResponse,redirect,render import json def test(request): if request.method == ‘POST‘: # 获取文件对象 file = request.FILES # 获取字符串对象 res = request.POST print(file,‘n‘,res) return HttpResponse(‘okokok‘) return render(request,‘test.html‘) ? 总结: form表单与ajax异同点: 1,form表单不支持异步提交局部刷新 2,form表单不支持传输json格式数据 3,form表单与ajax默认传输的编码格式都是?urlencoded (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |