jquery ajax因异步设置不当导致页面局部内容(load())刷新不显示的问题总结

jquery ajax因异步设置不当导致页面局部内容(load())刷新不显示的问题总结

需求背景

会议管理系统,页面布局为上左右标准布局,左侧为菜单列表。

开始进入系统时是列表信息,点击列表时,进入某个会议,同时刷新左侧的菜单,把左侧会议的功能列表菜单加载进来。

主页代码:

<div class="header"> <%@ include file="/pages/admin/pri/frames/topFrame.jsp" %> </div> <div class="main"> <div name="left_frame" id="left_frame" class="left_nav"> <%@ include file="/pages/admin/pri/frames/leftFrame.jsp" %> </div> <div class="pages"> <iframe src="${ctx}/pages/admin/pri/meeting/listMeeting.action" id="mainFrame" name="mainFrame" width="100%" οnlοad="Javascript:SetCwinHeight(this.id)" marginwidth="0" height="100%" marginheight="0" scrolling="auto" frameborder="0" hspace="0" vspace="0"></iframe> </div> </div>

原实现方式:

点击列表的编辑功能:

触发编辑事件:

function modify(mId){ window.location.href = "${ctx}/pages/admin/pri/meeting/getMeetingById.action? meeting="+ mId; showEditMenu("${ctx}", mId); }

每个子页面包含函数:

function showEditMenu(contentPath,meetingId){ $(window.parent.document).contents().find("#left_frame").load(contentPath+ "/admin/pri/basemenu/toManagerMeetingMenu.action", { "meetingId": meetingId }, doCallBack ); function doCallBack (response,status,xhr){ //alert(response); } }


出现的问题的现象:

IE FIREFOX下显示正常。Chrome safari下怎么点也却显示不了左侧的会议菜单。

问题排查:

1.排查原因后,推测chrome,safaridom对象解析不一致。排除不是

2.load方法自身或许有问题。重新用$.ajax方法来写,还是大多数时候显示不出来。

最后排查是因为modify方法同时触发了两个动作,而ajax默认设置是异步的,左侧页面就加载不出来了。

知道症结,问题迎刃而解了。两种改写实现方式:

第一种:维持原有代码不变,ajax的异步设置全局修改为false(默认是true)

$.ajaxSetup({async: false});

第二种:$ajax()方法重写原功能,把获取的返回结果用.html()方法设置进去即可。

参考代码:

$.ajax({ type: "get", url: contentPath+"/admin/pri/basemenu/toManagerMeetingMenu.action?meetingId="+meetingId, dataType: "html",//(可以不写,默认) timeout: 300, async : false, beforeSend: function(XMLHttpRequest){ //alert(contentPath+"/admin/pri/basemenu/toManagerMeetingMenu.action?meetingId="+meetingId); }, success: function(data, textStatus){ // alert(data);//data是一个字符串对象 $(window.parent.document).contents().find("#left_frame").html(data); }, complete: function(XMLHttpRequest, textStatus){ }, error: function(){ //请求出错处理 alert("load menu error"); } });


本来很诡异的问题就出在async : false的设置上!

以后得注意这个属性的设置。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值