【不能执行已释放的 sript 代码】 已解决 命名【疾风】

        在上周开发中遇上个恶心的问题,IE报错:“不能执行已释放的 script 代码”。当时已进入测试阶段,测试人员5点30提出的bug,自己一直搞到7:30才解决,这是没有任何补偿的加班。

背景概述:一个功能,两个主页面,这两个页面是单独的。这个功能的开发主要是本人负责,但是第二个主页面不是我写的,问题也就出在了第二个主页面上(以下以二主简称)。该页面上的操作逻辑是这样,选择人员(datagrid),选择项目-弹出窗口(datagrid)选择完成数据传递到该页面(二主),然后选择角色,点击保存(分配/替换),弹出确认页面,确认页面上有一些数据确认数据,点确认会从确认页面用ajax向后台传值。这时,Duang~前台报错了(在测试那里就是没反应了)。

这还是第一次遇到这个问题,之前自测时并没遇到,经对比测试数据发现使用历史数据可,新发起的项目就会报错,原因在于将项目信息转为json时调用了jquery的日期类型转换的函数,这时就会报错。历史数据不报错是因为历史数据没有存储日期相关的数据,因此也不存在转换调用函数的问题。

经过分析了解了是项目数据的问题,那么为什么项目项目数据就存在已释放的问题?追踪代码发现,在二主与项目选择页面传递数据是这么做的,当选择项目页面关闭时,如果是点击了保存按钮就调用选择项目页面的getData方法获取数据(var $tempData = this.getIFrameEl().contentWindow.getData();),获得数据后页面即关闭。这种方式在二主上显示正常,但是再对数据进行操作时便出现了问题。因为当页面关闭,页面的脚本被释放,原本一些函数对象指向的脚本就找不到了,因此报了标题的错误【不能执行已释放的 sript 代码】。

shit,分析到这里才知道怎么解决。我的解决方案就是换中数据传递方式:在页面关闭时,将需要的数据当成参数传递回二主页面。代码如下:

选择项目页面:
function saveData(){
var action={"flag":"ok","rows":{}};
action.rows = nui.encode({"rows":getData()});
CloseWindow(action);
}

二主页面:
if (action && action.flag == 'ok') {
var $tempData = nui.decode(action.rows).rows;

// 这里拿到的数据就可以用了.
}

转成json传递最保险了,没转换还是会报【不能执行已释放的 sript 代码】这个错误。

ps:和第一个页面没关系,提及第一个主页面只是想保留更多的开发细节,方便以后的回忆。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

horo99

求个赞啦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值