DWR调用后总是报出缺少对象的错误
来源:互联网 发布:mac office 激活教程 编辑:程序博客网 时间:2024/04/29 11:35
在我们现有的工程中,很多时候在点击某些操作控件之后,进行DWR的ajax方式验证后会发现报出缺少对象的JS错误,并且DWR方法的返回值不能正确得到,导致了系统中很多的功能无法实现。这个问题主要是因为我们在调用DWR的过程中创建了很多的对于全局所有的页面的一个DWR推送。让我们来分析下这个问题:
在DWR中,我们的页面和后台进行交互,当一个页面创建时,dwr就根据sessionId来和这个页面进行连接,每个调用DWR的页面都会和dwr后台创建一个连接,这种连接有两种启动方式,一种是页面主动请求调用,类似下面的方式:
这种方式在调用后,DWR打开和页面之间的连接,让页面将数据提交给后台方法处理后再返回,处了这种方式之外,还有一种方式,该方式DWR和该页面的连接一直打开,当dwr调用传递时,页面时时接受,从而达到推送的效果,类似下面的方式:
通过在body中配置onload方法来设定该页面和后台之间形成一种常打开的连接方式,再在后台调用DWR推送的
但是这样会有一个问题,后一种方式在推送时若没有设置好范围就会变成全局推送,导致任何一个调用了DWR方法的页面都会接受到推送的信息,并且在向后台递交请求接受返回值时接受到,比如一个判断名字的方法,调用DWR来判断名字是否重复,然后返回true或者false来判断,在返回值的时候出了返回原来的结果外,还将原来滞留在连接中未传递给页面的 执行userOnlineNum方法的指令也传递了过来,而该页面中没有这个方法,就会出现userOnlineNum找不到,即报出缺少对象的JS错误。
解决的方案主要是两种,一种是在传递时指定具体的接受页面,如下面的方式:
但是笔者尝试后发现效果不佳,有可能还有别的原因阻断的结果,所以采用了另外一种方式,设置一个全局JS包,在JS包中放入几个时时推送的JS方法,不做任何逻辑处理,只是单纯的用来解决缺少对象的问题,如下:
有人可能会觉得如果调用了全局方法会不会和原本需要调用的页面冲突。大可放心,因为如果页面和外部引用的JS包中含有同名同参数方法时,会首先调用页面中的JS方法。而每个页面和DWR的连接都是独立的,也不用担心相互干预的问题。
对这块其实了解甚少,只是系统中出现了BUG才关注跟踪了一下,希望有兴趣的一起来讨论下~
- DWR调用后总是报出缺少对象的错误
- eclipse报出的错误
- Android studio编译的时候总是报出build里文件的错误
- js导致的缺少对象错误
- 使用jquery 的ajax调用总是错误
- CreateFile 总是调用错误的解决办法
- 强调的总是缺少的
- 调用jquery缺少对象
- jquery 缺少对象 错误
- 调用没有在AndroidManifest.xml注册过的Activity,报出的错误提示
- jQuery中事件加载 DOM—@ready中调用其他方法,会提示缺少对象的错误
- jQuery中事件加载 DOM—@ready中调用其他方法,会提示缺少对象的错误
- jquery-1.4.2报出的错误
- scrapy安装后一直提示缺少vc++的错误
- dwr 对象不支持此属性和方法 缺少对象
- DWR 调用远程方法的错误和异常处理
- C# Ajax 在前台调用报出未定义错误
- 页面内调用js函数出错:“缺少对象”的解决方法
- 支持HTML5是大趋势,手机浏览器争夺移动互联网入口
- Sliverlight Binding
- Hibernate配置文件生成数据库
- p217 8086汇编FLAG寄存器中的OF标志 | 8086汇编标志寄存器 | 标志寄存器OF标志
- 安win7出错后出现error loading operating system (实际情况为在win7上安装XP出现此错误)
- DWR调用后总是报出缺少对象的错误
- 【求助】救救“这个可怜的孩子”
- 移动广告平台:烧还是不烧?
- SQL Server在存储过程中编写事务处理代码的三种方法
- Eclipse代码自动提示增强及自动上屏功能的修改
- 小孩的病耽误不得
- 理解三层
- cocos2d画图
- linux学习笔记