day23-伪ajax操作
一、前言
之前我们学到了ajax的请求,学到了,用jquery自带的ajax,还有就是原生ajax,这个在上一篇博客里面我有详细的写到,但是我们还有一种方式就是利用iframe,来一个伪ajax的操作,就是说,我ajax发送请求是偷偷的往后端发,不用刷新页面,我们一般使用的顺序是:先用jquery的ajax->原生ajax->实在不给用,再用iframe,伪ajax操作。
二、iframe标签原理
iframe的作用就是在一个页面中,去嵌套另外一个页面,所以我们当前页面不能直接去控制iframe的页面的,需要通过间接的方式去控制,先来看看 iframe 是怎么一回事吧,我们先把它的原理搞清楚
2.1、iframe原理
说明:就是在页面里面嵌套一个页面,代码如下:
<body> <input type="button" value="Ajax1" onclick="Ajax1();"> <input type="text" id="url"/><input type="button" value="发送iframe请求" onclick="iframeRequest();"/> <iframe id='ifm' src="http://www.cnblogs.com/zhangqigao"></iframe> #定义iframe的标签 <script type="text/javascript" src="/static/jquery-1.12.4.js"></script> <script> //修改url function iframeRequest(){ var url = $("#url").val(); $('#ifm').attr('src',url); } </script> </body>
这个效果我们需要在谷歌浏览器下去看,我这边测试的时候,火狐浏览器显示不了,所以我们在谷歌浏览器下如图:
这边注意了,当你输入网址的时候其实页面有并没有刷新,但是我们用form的时候是刷新的,这个小编就不带你去实验了,下面我们来做一个伪ajax的操作
三、伪ajax的操作
3.1、ajax.html的html代码
说明:我们先写上静态的标签代码,因为我们要说明一下,iframe的本质,先写上吧,代码如下:
<body> <!--建立from个iframe之间的关系,表单就会通过ifrm提交到后台去--> <form action="/ajax_json/" method="POST" target="ifm1"> <!--target属性:表示关联哪一个ifram标签--> <!--<iframe name="ifm1" onload="iframeLoad();"></iframe> --> <!--这边的值返回了,就会执行一个onload事件--> <iframe id="ifm1" name="ifm1"></iframe> <!--这边的值返回了,就会执行一个onload事件--> <input type="text" name="username"/> <input type="text" name="email"/> <input type="submit" onclick="submitForm();" value="Form提交"> #这边创建一个onlcick事件 </form> </body>
我们来看一下前端,这个iframe在前端,到底是一个什么鬼?如图:
这边有一个#document =>相当于一个上线下文或者是一个空间管理,我们整个后台,我们html里面又嵌套了一个html,不能直接用 obj.innertext,obj.children等方式获取,这个document是一个特殊的东西,要用也是的值跨进去。
3.2、ajax_json的代码
说明:ajax_json的代码有点改动,ajax函数是基于上一篇博客中的代码写的。
def ajax_json(request): print(request.POST) ret = {'status':True,'data':request.POST.get('username')} #获取userName import json return HttpResponse(json.dumps(ret))
3.3、跨iframe取值
说明:刚刚我们也说了,不能直接取,我们直接在submit标签上绑定一个onclick事件,看看js的代码是如何写的吧,代码如下:
<script type="text/javascript" src="/static/jquery-1.12.4.js"></script> <script> function submitForm(){ $("#ifm1").on('load',function(){ //console.log(123); var text = $("#ifm1").contents().find('body').text(); //$("#ifm1").contents():表示是iframe下面的值 //console.log(text); var obj = JSON.parse(text); // 拿到之后根据用户返回的数据做一些操作了 console.log(obj); }) } </script>
注意了,这个代码是写在ajax.html页面最下面,返回的效果图,如下:
更多详细地址中的伪ajax操作:https://www.cnblogs.com/wupeiqi/articles/5703697.html