今天遇到个问题,后台会员审核之后,页面内的会员审核状态要及时改变,但又不能指望用户手动刷新(用户体验很不好)

如果审核页面和显示审核状态时同在一个html页面的话,那么直接用js改变div内部的文本就可以了,像下面这样:

$("#btn1").click(function(){
$("#test1").text("Hello world!");
});
$("#btn2").click(function(){
$("#test2").html("<b>Hello world!</b>");
});
$("#btn3").click(function(){
$("#test3").val("Dolly Duck");
});

但是,后台页面的布局是这样的:

这画的应该不难看出来吧,不过我还是要说明一下;

一个html中包含一个iframe1,点击这个iframe1中的某个字段,会跳出一个模态框(用于审核的div2),审核结束后提交信息,点击button

ok,此时数据提交到接口并进行了一系列操作(此处省略具体操作),然后div2窗口关闭,这个时候iframe1中的某些字段应该做出改变,比

如,之前审核状态是“未审核”,在div2审核操作了之后,此时的状态应该变为“已审核”,用户希望的是,在点击了button按钮之后,状态立即

刷新,那么我们应该在提交数据到接口,成功之后做出点什么来改变这个状态,但是上面说了,直接用js获取iframe1中的标签改变其值是行不通

的,所以我们可以这么做:

function check_pass(uid) {
$.ajax({
type: "GET",
url: siteurl,
dataType: "json",
data:{
"c":"api",
"m":"checkpass",
"uid":uid
},
success: function(text) {
var _body = window.parent;
var _iframe1=_body.document.getElementById('rightMain');
_iframe1.contentWindow.location.reload(true);
}
});
}

这个函数是在button点击的时候执行的,button是存在于div2中的,发起ajax请求向接口提交数据之后,我们来看请求成功之后的代码:

var _body = window.parent;--------------------获取这个div2的父级窗口,那么自然是这个body了;

var _iframe1 = _body.document,getElementById('rightMain');-------------------根据id获取iframe1这个对象;

_iframe1.contentWindow.location.reload(true);-----------------------看到reload就该知道是刷新了这个iframe1了。

就这样,div2中的js操作实现了iframe1的刷新,现在看来真的很简单,只不过当时绕了一些弯子,现在顺便总结一下iframe窗口的刷新方法:

(注:下面的_iframe是通过各种方法获得的iframe对象,比如通过name获得、通过id获取等等)

①_iframe.contentWindow.location.reload(true);

②_iframe.src=src;(前面的src是_iframe的src属性,后面是是一个字符串值应该和它原本的属性值相同,不然怎么叫"刷新"呢)

③$('#iframe').attr('src', $('#iframe').attr('src'));(jQuery写法,和上面第二种同理)

--------------------------------------------------------------------------------华丽的分割符------------------------------------------------------------------------------------

(5.31)今天,又遇到一个ajax提交,iframe刷新的例子,

ajax提交的数据是从select和input中取得的,如下图所示:

const siteurl = "{SITE_PATH}{SELF}";
const stateids=$(".stateid");
var stateval = "";
var moneyval ="";
var stateid ="";
for(let i=;i<size;i++){
$(sure[i]).click(function(){
stateval = $(state[i]).val();
moneyval = $(money[i]).val();
stateid = $(stateids[i]).val();
$.ajax({
type: "GET",
url: siteurl,
dataType: "json",
data:{
"c":"api",
"m":"state",
"stateval":stateval,
"moneyval":moneyval,
"id":stateid
},
success: function(text) {
eco_refresh();
},
error: function(text) {
eco_refresh();
}
});
});
};

因为每一条记录都有修改这个选项,而且取值是取当前记录的select和input的值,记录是用类for循环语句输出的,所以

他们的样式以及DOM结构都是一样的,取值的时候为了确保取值正确,用到了上面的for循环,红字的jQuery对象依次表

示确认按钮、select标签、input金额标签(select值为认筹的时候才会显示)、input记录ID值标签(类型为hidden,看不

见的,仅为取id值所用)

注意这里用了let声明变量i,这里涉及到作用域的概念,如果你用var声明i,然后再内部var that = i,然后$(state[that])也

是可以的,对于let、var、const、this的区别会在博主理解透彻之后专门写一篇博文来记录,这里就不探讨了。

上面的代码不难看出,每个确认按钮点击的时候会提交一个ajax请求,至于为什么success和error回调都选择刷新iframe,

这个问题,我想我在这篇博文已经有所交代:https://www.cnblogs.com/eco-just/p/9094940.html。(ajax200OK状态下的

回调执行问题)

如此想来,提交ajax后,直接执行刷新的方法应该就OK了,但是问题却出现了,

这是之前iframe和div提交刷新都不曾出现的问题,之前也是有input填写信息然后取值提交的,只不过这次多了一个select

取值的问题,于是个人猜测应该是select标签onChange事件之后,值发生改变,浏览器的机制好意提醒我们,但是显然我

们是不想这种机制来干扰用户体验的,于是百度一下,找到了答案:

于是将解决方法添加到refresh函数:

function eco_refresh(){
var _body = window.parent;
var _iframe1=_body.document.getElementById('rightMain');
window.onbeforeunload=function(){};
_iframe1.contentWindow.location.reload(true);
}

之后便抑制了弹窗的出现。

js控制iframe的刷新(页面局部刷新)的更多相关文章

  1. 使用ajax与iframe嵌套实现页面局部刷新

    使用ajax与iframe嵌套实现页面局部刷新.该javascript代码仅供参考,需按自己需要修改.​1. [代码]javascript代码 function cj_start(depname,gr ...

  2. 浅析PHP页面局部刷新功能的实现小结(转)

    转载地址 https://www.jb51.net/article/38901.htm 方法其实挺多的.以前比较常用的是iframe这样来做.现在多了个ajax,所以一般情况下都是用的ajax.第一种 ...

  3. jquery实现页面局部刷新

    后台管理中总是使用frameset进行分成部分进行管理,但是感觉很不好用,尤其是页面间调转还要判断window.parent,太令我费神了,于是学习使用XMLHttpRequest进行页面局部刷新.代 ...

  4. Js控制iFrame切换加载网址

    <html> <head> <title>Js控制 iFrame 切换加载网址</title> </head> <body> & ...

  5. Iframe 高度自适应,js控制Iframe 高度自适应

     Iframe 高度自适应, js控制Iframe 高度自适应, iframe自适应高度 ================================ ©Copyright 蕃薯耀 2019年12 ...

  6. js实现F5键刷新后菜单保持之前状态以及监听F5页面刷新子iframe 而父页面不刷新

    利用layui实现菜单效果时,刷新页面仍回到首页状态,需要 实现iframe子页面刷新父元素不刷新,下面是代码 //刷新时禁用F5的默认事件 $(document).keydown(function ...

  7. Webform——页面局部刷新

    有一些数据控件,每次更改它的值后,都会重新查询数据库,然后再重新显示出来. 这样每次都会刷新全部页面,如果是一些信息量很庞大的页面,就会出现卡顿的现象,为了避免这种情况,就用到了局部刷新. 所用到的控 ...

  8. ionic局部刷新页面与刷新整个页面

    1.全局刷新,禁用缓存: 在app.js中设置cach:false,如下: .state('material', { url: '/material', cache:false, templateUr ...

  9. HTML页面局部刷新

    /.事件响应刷新:有请求才会刷新 1.通过JS HTML DOM或jQuery获取HTML元素,通过DOM方法或jQuery方法监听页面事件,获取用户请求: 2.通过Ajax将用户请求提交至服务器,服 ...

  10. ASP.Net用jQuery ajax实现页面局部刷新

    刚开始的时候使用asp的updatepanel控件实现局部刷新,而且在本地运行正确,但是部署到服务器上就变成整个页面全部刷新了.服务器用的是Windows server2000,本地机子上用的是win ...

随机推荐

  1. 如何实现关系表的级联删除(ON DELETE CASCADE的用法)

    以下面两张表为例: SQL> desc person 名称                                      是否为空? 类型 --------------------- ...

  2. Hadoop的分布式架构改进与应用

    1.  背景介绍 谈到分布式系统,就不得不提到Google的三驾马车:GFS[1],MapReduce[2]和BigTable[3]. 虽然Google没有开源这三个技术的实现源码,但是基于这三篇开源 ...

  3. dymaic方式的Json序列化

    from:http://stackoverflow.com/questions/3142495/deserialize-json-into-c-sharp-dynamic-object If you ...

  4. Java分布式:JWT(JSON Web Tokens)

    Java分布式:JWT(JSON Web Tokens) 0.优势 Session方式存储用户状态占用大量服务器内存.一般而言,大型应用还需要借助一些KV数据库和一系列缓存机制来实现Session的存 ...

  5. Python Tornado之四(Http层)

    HTTPRequest,HTTPServer与HTTPConnection 前面小节在分析 handler 时提到,handler 的读写实际是依靠 httprequest 来完成的.今天就分析 to ...

  6. HDU 4370 - 0 or 1 (SPFA+思维)

    题意:给一个N*N的矩阵C,和一个N*N的只由0和1组成的矩阵X. X满足以下条件: 1.X 12+X 13+...X 1n=1  2.X 1n+X 2n+...X n-1n=1  3.任意 i (1 ...

  7. hadoop28---netty传对象

    Netty中,通讯的双方建立连接后,会把数据按照ByteBuf的方式进行传输,例如http协议中,就是通过HttpRequestDecoder对ByteBuf数据流进行处理,转换成http的对象.基于 ...

  8. Refseq,accssion #,gi ,Ensembl的关系

    accession编号的分子类型代号: Ensembl是2000年就开始开发的基因组自动注释软件,起初是只对真核生物基因组,2009年后开始对植物,细菌等开放.既然要注释,就要有注释对象(基因,转录本 ...

  9. java常见异常(更新中)

    Java的异常分为两种,一种是运行时异常(RuntimeException),一种是非运行异常也叫检查式异常(CheckedException) .NullPointerException 空指针异常 ...

  10. 20145240 GDB调试汇编堆栈过程分析

    20145240 GDB调试汇编堆栈过程分析 测试代码 #include<stdio.h> short addend1 = 1; static int addend2 = 2; const ...