JavaScript学习心得之用Iframe实现Ajax无刷新效果

用Iframe实现Ajax无刷新效果

需求:实现一个页面的下拉框连动效果,要求无刷新。

看到需求的人,通常第一时间会想到用Ajax来实现。我展示的是一个通过Iframe实现无刷新效果。

例:你需要在a.jsp页面上实现连动下拉框!

a.jsp页面关键代码:

function getSelect(obj){
     var ffrID = document.getElementById("ffrID");
     ffrID.value=obj.value;
     ffr.submit();
}

//需要连动的下拉框
<select name="a" οnchange="getSelect(this)">
     <option>....</option>
</select>

<div id="selectData"></div>

<form name="ffr" action="aaa.action" target="ffrIframe">
      <input type="hidden" id="ffrID" name="ffrID" />
</form>

<iframe name="ffrIframe" src='b.jsp' height='0' width='0'  bordercolor='#E2EBF6' frameborder="0" scrolling="no" height="100%" width="100%"/>

 

b.jsp页面关键代码:

window.οnlοad=function(){
      window.parent.document.getElementById("selectData").innerHTML = document.getElementById("selectDataStr").innerHTML;
}

<div id="selectDataStr">
      <s:property value="selectStr" escape="false" />
</div>

 


用Iframe实现Ajax无刷新效果的整个流程:
用户选中select标签后,触发事件getSelect(obj).在事件中获得该select标签的选项值,赋给一个名为"ffrID"的隐藏域。然后将包含"ffrID"进行自动提交到后台处理,后台会跟据请求的ID查询出二级select(下拉菜单)。然后返回到b.jsp。通过b.jsp的onload(初使化事件)动态修改a.jsp页面的节点,从而达到无刷新效果。

a.jsp页面代码讲解:
1、form的action="aaa.action",这个action是用来查询二级下柆框数据的。
2、form的target="ffrIframe",target是用来将查询后的数据返回到指定的框架页面,值"ffrIframe"是标签<iframe>的name属性。

a.jsp页面代码讲解:
1、<s:property value="selectStr" escape="false" />,这句代码是指:接收的是从后台组装好的字符串HTML代码。通过struts2的标签s:property的escape="false"属性来解析HTML代码,从而使原来的字符串HTML代码还原成控件。假设该代码返回的结果是:"<select name="xxx"><option value="xxx">xxxx</option></select>",那么通过escape="false"属性能将它还原成下拉菜单。

 

总结:
通过用Iframe实现Ajax无刷新效果这个例子,可以延伸两个对项目开发很有帮助的知识点。
第一:在上面的例子中用到一个关键的属性:target。target属性用的地方很多,例如在一个多iframe搭建的网页中,在某iframe子页面提交后,需要将结果返回到另一iframe页面。代码中就可用到target属性。再举一常见问题,在论坛上问的也最多的。例:在模态窗口中提交一些数据到后台,经过处理,从后台再次返回到当前提交的模态窗口中。那么通常遇到的问题是:数据从后台返回到最初的模态页面,但这个页面却是从新打开的。解决方案:可在<head>标签的最中间加一句代码<base target="_self"/>即可实现。

第二:通过s:property标签解析从后台返回的HTML标签。这样做的好处有:方便控制。比如:我要在某个页面,跟据数据库里的数据在页面动态勾选项相应的复选框。而按照传统的写法,在页面需要对每一个复选框进行if判断。如果复选框够多,那页面则会变很麻烦。通过从后台组装好的HTML代码在前台显示,页面会清爽很多。而且在后台组装勾选好的复选框比前台动态勾选复选框要容易的多.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值