一、iframe使用

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

<div>
<p>学习iframe</p>
<form id='form' action="ajax1" method="post" target="ifra">
<input type="text">
<input type="button" value="提交" class="btn" onclick="ajaxSubmit5()">
</form>
<iframe id="iframe" name="ifra" style="height: 100px;width: 250px;" ></iframe>
</div>
……
function ajaxSubmit5() {
document.getElementById('iframe').onload = reloadIframe;
$('#form').submit();
} function reloadIframe() {
//ret = this.contentWindow.document.body.innerText
ret = $(this).contents().find('body').text()
data = JSON.parse(ret)
if (data.status == 'success')
alert('welcome')
}

创建iframe和Form表单

def ajax1(request):
print(request.GET)
print(request.POST)
print(request.body)
ret = {'status':'success','data':[1,'hello']}
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上传文件

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

模板

function ajaxSubmit8() {
$('#form1').submit();
document.getElementById('iframe1').onload = reloadIframe1;
} function reloadIframe1() {
ret = this.contentWindow.document.body.innerHTML
data = JSON.parse(ret)
if (data.status == 'success')
alert('welcome')
}

iframe+form

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

后台处理函数

三、利用ajax+FormData上传文件

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

模板

function ajaxSubmit6() {
var data = new FormData() //使用FormData时,需要在ajax中添加processData和contentType两个参数
data.append('k1','v1')
data.append('k2','v2')
f = $('#img')[0].files[0]
data.append('k3',f)
$.ajax({
url:'ajax1',
type:'POST',
data:data,
processData:false,
contentType:false,
success:function (arg) {
console.log(arg)
}
})
} function ajaxSubmit7() {
var data = new FormData()
//使用FormData来传递数据时,无论是使用jQuery还是原生的XMLHttpRequest,都不能在后台使用request.body,数据在request.POST和request.FILES中
data.append('k1','v1')
data.append('k2','v2')
f = $('#img')[0].files[0]
data.append('k3',f)
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if(xhr.readyState == 4)
console.log(xhr.responseText);
}
xhr.open('POST','ajax1');
xhr.send(data);
}

ajax+FormData

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

后台处理函数

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

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

模型

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

后台处理函数

<script src="/static/jquery-3.3.1.min.js"></script>
<script>
function uploadFile() {
document.getElementById('iframe1').onload = reloadIframe1;
$('#form1').submit();
} function reloadIframe1() {
ret = this.contentWindow.document.body.innerHTML
obj = JSON.parse(ret)
console.log(obj)
var tag = document.createElement('img') //创建img标签
tag.src = obj.data //设置img标签的src为本地已上传图片的路径
$('#preview').empty().append(tag) //清空预览图片并上传新的图片
}
</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. asp .net core发布订阅kafka

    Kafka是一种高吞吐量的分布式发布订阅消息系统,有如下特性: 通过O的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能. 高吞吐量:即使是非常普通的硬件Ka ...

  2. sql 更新时 实现 数字字段自加1

    第一种:直接使用SQL语句,这种方式可以避免并发操作造成的数据不一致问题UPDATE 表名称 SET 列名称 = 列名称 + 1 WHERE …… 第二种:将上面的语句逻辑封装成一个存储过程,加上事务 ...

  3. window的常用操作

    一.window.location location对象属性 1.location.href 属性返回当前页面的 URL. 2.location.pathname 返回路径和方法名称 3.locati ...

  4. C# 基于内容电影推荐项目(一)

    从今天起,我将制作一个电影推荐项目,在此写下博客,记录每天的成果. 其实,从我发布 C# 爬取猫眼电影数据 这篇博客后, 我就已经开始制作电影推荐项目了,今天写下这篇博客,也是因为项目进度已经完成50 ...

  5. 重学 Java 设计模式:实战模版模式「模拟爬虫各类电商商品,生成营销推广海报场景」

    作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 黎明前的坚守,的住吗? 有人举过这样一个例子,先给你张北大的录 ...

  6. 安装archlinux

    arch安装步骤 archlinux官方安装wiki 1.分区and格式化分区      (分区用fdisk,格式化分区用mkfs) 2.挂载分区  (mount命令) 3.安装archlinux   ...

  7. Scala 基础(十二):Scala 函数式编程(四)高级(二)参数(类型)推断、闭包(closure)、函数柯里化(curry)、控制抽象

    1  参数(类型)推断 参数推断省去类型信息(在某些情况下[需要有应用场景],参数类型是可以推断出来的,如list=(1,2,3) list.map() map中函数参数类型是可以推断的),同时也可以 ...

  8. winserver2008R2安装配置JDK+tomcat之坑

    记一次winserver安装jdk+tomcat 准备软件: jdk-8u241-windows-x64 apache-tomcat-8.5.46-windows-x64 一.安装java 1.安装j ...

  9. ETag简介与作用

    ETag简介与作用 一.ETag简介 ETag是URL的tag,用来标示URL对象是否改变.这样可以应用于客户端的缓存:服务器产生ETag,并在HTTP响应头中将其传送到客户端,服务器用它来判断页面是 ...

  10. oracle数据库备份还原命令

    oracle数据库备份命令exp 用户名/密码@orcl file=d:\xxxxxx.dmp owner=用户名 oracle数据库还原命令sqlplus conn / as sysdba drop ...