一、iframe使用

iframe在一个页面中,相当于整个window窗口的子窗口,可通过页面的元素结构查看。

  1. <div>
  2. <p>学习iframe</p>
  3. <form id='form' action="ajax1" method="post" target="ifra">
  4. <input type="text">
  5. <input type="button" value="提交" class="btn" onclick="ajaxSubmit5()">
  6. </form>
  7. <iframe id="iframe" name="ifra" style="height: 100px;width: 250px;" ></iframe>
  8. </div>
  9. ……
  10. function ajaxSubmit5() {
  11. document.getElementById('iframe').onload = reloadIframe;
  12. $('#form').submit();
  13. }
  14.  
  15. function reloadIframe() {
  16. //ret = this.contentWindow.document.body.innerText
  17. ret = $(this).contents().find('body').text()
  18. data = JSON.parse(ret)
  19. if (data.status == 'success')
  20. alert('welcome')
  21. }

创建iframe和Form表单

  1. def ajax1(request):
  2. print(request.GET)
  3. print(request.POST)
  4. print(request.body)
  5. ret = {'status':'success','data':[1,'hello']}
  6. return HttpResponse(json.dumps(ret))

后台处理函数

执行过程:

①在输入框输入内容并点击提交,执行ajaxSubmit5(),并通过submit()向后台提交数据;

②由于在form表单中设置了target="ifra",即target为iframe的name值,因此后台HttpResponse的返回值传递给iframe

③后台向iframe传递返回值时,即onload触发reloadIframe()

④在reloadIframe()中,通过this.contentWindow.document.body.innerText获取iframe的显示内容,即HttpResponse的返回值,再进行判断。

      

二、利用iframe+form上传文件

  1. <form id='form1' action="ajax1" method="post" target="ifra1" enctype="multipart/form-data">
  2. <input type="text" name="k1">
  3. <input type="text" name="k2">
  4. <input type="file" name="k3">
  5. <input type="button" value="提交" class="btn" onclick="ajaxSubmit8()">
  6. </form>
  7. <iframe id="iframe1" name="ifra1" style="display: none;"></iframe>

模板

  1. function ajaxSubmit8() {
  2. $('#form1').submit();
  3. document.getElementById('iframe1').onload = reloadIframe1;
  4. }
  5.  
  6. function reloadIframe1() {
  7. ret = this.contentWindow.document.body.innerHTML
  8. data = JSON.parse(ret)
  9. if (data.status == 'success')
  10. alert('welcome')
  11. }

iframe+form

  1. def ajax1(request):
  2. print(request.POST)
  3. print(request.FILES)
  4. obj = request.FILES.get('k3')
  5. file_path = os.path.join('static', obj.name)
  6. with open(file_path, 'wb') as f:
  7. for line in obj.chunks():
  8. f.write(line)
  9. ret = {'status':'success','data':[1,'hello']}
  10. return HttpResponse(json.dumps(ret))

后台处理函数

三、利用ajax+FormData上传文件

  1. <input type="file" id="img">
  2. <input type="button" class="btn" value="提交" onclick="ajaxSubmit6()">
  3. <input type="button" class="btn" value="提交" onclick="ajaxSubmit7()">
  4. ……

模板

  1. function ajaxSubmit6() {
  2. var data = new FormData() //使用FormData时,需要在ajax中添加processData和contentType两个参数
  3. data.append('k1','v1')
  4. data.append('k2','v2')
  5. f = $('#img')[0].files[0]
  6. data.append('k3',f)
  7. $.ajax({
  8. url:'ajax1',
  9. type:'POST',
  10. data:data,
  11. processData:false,
  12. contentType:false,
  13. success:function (arg) {
  14. console.log(arg)
  15. }
  16. })
  17. }
  18.  
  19. function ajaxSubmit7() {
  20. var data = new FormData()
  21. //使用FormData来传递数据时,无论是使用jQuery还是原生的XMLHttpRequest,都不能在后台使用request.body,数据在request.POST和request.FILES中
  22. data.append('k1','v1')
  23. data.append('k2','v2')
  24. f = $('#img')[0].files[0]
  25. data.append('k3',f)
  26. var xhr = new XMLHttpRequest();
  27. xhr.onreadystatechange = function(){
  28. if(xhr.readyState == 4)
  29. console.log(xhr.responseText);
  30. }
  31. xhr.open('POST','ajax1');
  32. xhr.send(data);
  33. }

ajax+FormData

  1. def ajax1(request):
  2. print(request.POST)
  3. print(request.FILES)
  4. obj = request.FILES.get('k3')
  5. file_path = os.path.join('static', obj.name)
  6. with open(file_path, 'wb') as f:
  7. for line in obj.chunks():
  8. f.write(line)
  9. ret = {'status':'success','data':[1,'hello']}
  10. return HttpResponse(json.dumps(ret))

后台处理函数

四、利用iframe+form上传并生成图片预览

  1. <form id='form1' action="upload_file" method="post" target="ifra1" enctype="multipart/form-data">
  2. <input type="file" name="k3" onchange="uploadFile()">
  3. </form>
  4. <iframe id="iframe1" name="ifra1" style="display: none;"></iframe>
  5. <div>预览</div>
  6. <div id="preview"></div>

模型

  1. def upload_file(req):
  2. if req.method == 'GET':
  3. return render(req,'upload.html')
  4. else:
  5. ret = {'status': True, 'data': None, 'message': None}
  6. obj = req.FILES.get('k3')
  7. nid = str(uuid.uuid4())
  8. file_path = os.path.join('static', nid + obj.name)
  9. with open(file_path, 'wb') as f:
  10. for line in obj.chunks():
  11. f.write(line)
  12. ret['data'] = file_path
  13. return HttpResponse(json.dumps(ret))

后台处理函数

  1. <script src="/static/jquery-3.3.1.min.js"></script>
  2. <script>
  3. function uploadFile() {
  4. document.getElementById('iframe1').onload = reloadIframe1;
  5. $('#form1').submit();
  6. }
  7.  
  8. function reloadIframe1() {
  9. ret = this.contentWindow.document.body.innerHTML
  10. obj = JSON.parse(ret)
  11. console.log(obj)
  12. var tag = document.createElement('img') //创建img标签
  13. tag.src = obj.data //设置img标签的src为本地已上传图片的路径
  14. $('#preview').empty().append(tag) //清空预览图片并上传新的图片
  15. }
  16. </script>

iframe+form

iframe和DataForm的更多相关文章

  1. 完美判断iframe是否加载完成

    var iframe = document.createElement("iframe"); iframe.style.width = "265px"; ifr ...

  2. js学习笔记:操作iframe

    iframe可以说是比较老得话题了,而且网上也基本上在说少用iframe,其原因大致为:堵塞页面加载.安全问题.兼容性问题.搜索引擎抓取不到等等,不过相对于这些缺点,iframe的优点更牛,跨域请求. ...

  3. 页面嵌入dom与被嵌入iframe的攻防

    1.情景一:自己的页面被引入(嵌入)至别人的页面iframe中 if(window.self != window.top){ //url是自己页面的url window.top.location.hr ...

  4. iframe用法

    <iframe src="http://caiyanli.top/" height="500"  width="500" frameb ...

  5. 如何获取url中的参数并传递给iframe中的报表

    在使用报表软件时,用户系统左边一般有目录树,点击报表节点就会在右侧网页的iframe中显示出报表,同时点击的时候也会传递一些参数给网页,比如时间和用户信息等.如何使网页中的报表能够获取到传递过来的参数 ...

  6. JavaScript权威设计--Window对象之Iframe(简要学习笔记十四)

    1.Window对象属性的文档元素(id) 如果在HTML文档中用id属性来为元素命名,并且如果Window对象没有此名字的属性,Window对象会赋予一个属性,它的名字是id属性的值,而他们的值指向 ...

  7. ASP.NET 页面禁止被 iframe 框架引用

    两个站点: a.sample.com b.sample.com a.sample.com 站点中的一段示例 JS 代码: var iframe = document.createElement(&qu ...

  8. 父页面操作iframe子页面的安全漏洞及跨域限制问题

    一.父子交互的跨域限制 同域情况下,父页面和子页面可以通过iframe.contentDocument或者parent.document来交互(彼此做DOM操作等,如父页面往子页面注入css). 跨域 ...

  9. 解决iframe作为子窗口,刷新后iframe页面跳转到其它页面的问题

    转载请在页首注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/5990262.html 前言: 在开发网站时,尤其是管理后台,我们经常会使用iframe作为内容窗 ...

随机推荐

  1. Python实用笔记 (8)高级特性——迭代

    如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration). 比如dict就可以迭代: >>> d = {'a ...

  2. springboot Jar包开启远程调试

    jar 正常启动 java -jar rest-demo-0.0.1-SNAPSHOT.jar 开启DEBUG模式需追加参数 java -Xdebug -Xrunjdwp:server=y,trans ...

  3. 一个JSON解构赋值给另一个字段不同的JSON

    往数据里添加JSON字符串 // 往数据里添加JSON字符串 var arr = []; var json ={"name":"liruilong"," ...

  4. Spreading the Wealth,思维

    题目去洛谷 题意: 很清晰,n个人,每人有一些硬币硬币总数sum≡0(mod n),通过一些互相交换,使硬币数平均(即每人有相同个数的硬币) 分析: 还是有点思维含量的,我们这样想,我们其实就是要确定 ...

  5. Spring-Validation(数据校验) 你值得拥有

    前言 最近看到很多童鞋在项目中的对请求参数的校验都用的if来判断各参数的属性,如: if(StringUtils.isBlank(username)){ return RR.exception(&qu ...

  6. day08总结

    集合常用操作# 一.关系运算firends1 = {"zero", "kevin", "jason", "egon"}f ...

  7. cookie与token

    cookie: 登陆后后端生成一个sessionid放在cookie中返回给客户端,并且服务端一直记录着这个sessionid,客户端以后每次请求都会带上这个sessionid, 服务端通过这个ses ...

  8. Maven 专题(三):为什么要用Maven

    1 真的需要吗? Maven 是干什么用的?这是很多同学在刚开始接触 Maven 时最大的问题.之所以会提出这个问题, 是因为即使不使用 Maven 我们仍然可以进行 B/S 结构项目的开发.从表述层 ...

  9. python 并发 ThreadPoolExecutor

    正文:Executor是一个抽象类,子类: ThreadPoolExecutor和ProcessPoolExecutor ,一个线程池,一个进程池. future对象:在未来的某一时刻完成操作的对象. ...

  10. Go的100天之旅-03变量

    变量 变量介绍 变量这个词来源于数学,类似方程中的x.y,代表的是存储在计算机中的值.这里主要介绍Go和其它编程语言不一样的地方,在前面我们提到过,Go是一门静态语言.静态语言区别动态语言一个重要的特 ...