jQuery MiniUI

标题: jQuery MiniUI开发系列之:Ajax处理超时、服务端错误 [打印本页]

作者: fcrong    时间: 2012-12-11 15:30:52     标题: jQuery MiniUI开发系列之:Ajax处理超时、服务端错误

MiniUI所有组件的ajax交互,均使用标准、成熟的jQuery.ajax。
依赖于jquery ajax组件的完善性,我们可以拦截住每一次ajax请求处理。
比如,拦截ajax返回数据前,判断返回的数据内容是超时、服务端错误等,此时或弹出信息框、或页面跳转。

首先要注意,将mini_debugger = false;禁止掉默认的MiniUI错误信息框。
mini_debugger在boot.js内设置即可。

监听ajax全局完成事件,判断返回内容是超时的话,则跳转登录页面:
  1. $(document).ajaxComplete(function (evt, request, settings) {
  2.     var text = request.responseText;
  3.     //判断返回的数据内容,如果是超时,则跳转到登陆页面
  4.     if (text == "logout") {
  5.         top.location = '/login.html';
  6.     }
  7. })
复制代码

同理,如果服务端返回错误信息,可以:
  1. $(document).ajaxComplete(function (evt, request, settings) {
  2.     var text = request.responseText;
  3.     var obj = mini.decode(text);
  4.     if (obj.error != 0) {
  5.         alert(obj.errorMsg);
  6.     }
  7. })
复制代码


作者: ajoke    时间: 2013-4-25 11:55:13

这个功能 还有没有必要用呢?
beforeload                数据加载前发生
preload                数据加载,设置到Grid前发生
loaderror       
{
    sender: Object, //表格对象
    xmlHttp: Object, //ajax对象
    errorMsg: String //错误信息
    errorCode: int  //错误码
}
数据加载错误时发生
load                数据加载成功时发生
作者: niko    时间: 2013-4-25 21:19:14

你也可以用。
一个是全局控制,一个是表格控制。

作者: yanbh    时间: 2013-8-12 15:36:38

ajaxComplete全局事件监听写在boot.js文件中能起作用吗?
作者: factory    时间: 2013-8-12 16:39:47

yanbh 发表于 2013-8-12 15:36
ajaxComplete全局事件监听写在boot.js文件中能起作用吗?

可以是可以的,但是因为jquery的引用也在 boot里面,注意boot.js里面的顺序
作者: yanbh    时间: 2013-8-14 14:01:53

factory 发表于 2013-8-12 16:39
可以是可以的,但是因为jquery的引用也在 boot里面,注意boot.js里面的顺序

版主,能提供在boot.js里处理jquery的ajaxcomplete 全局登录超时的示例或代码吗?
登录超级是任务一个业务系统都需要处理的,这块希望有一个完整的且不复杂的处理机制
作者: factory    时间: 2013-8-15 09:13:54

yanbh 发表于 2013-8-14 14:01
版主,能提供在boot.js里处理jquery的ajaxcomplete 全局登录超时的示例或代码吗?
登录超级是任务一个 ...

http://miniui.com/bbs/forum.php? ... &extra=page%3D1

看这篇帖子
作者: boy1064910    时间: 2013-10-27 14:18:56

factory 发表于 2013-8-12 16:39
可以是可以的,但是因为jquery的引用也在 boot里面,注意boot.js里面的顺序

这块顺序应该是怎么排放?
作者: lost    时间: 2013-10-28 10:43:42

boy1064910 发表于 2013-10-27 14:18
这块顺序应该是怎么排放?

最好放在页面上
作者: angle    时间: 2014-4-2 16:39:46

factory 发表于 2013-8-12 16:39
可以是可以的,但是因为jquery的引用也在 boot里面,注意boot.js里面的顺序

这段代码在每个页面都要加吗
作者: factory    时间: 2014-4-2 16:42:40

angle 发表于 2014-4-2 16:39
这段代码在每个页面都要加吗

是的,需要引用的页面加上,他就是一个JS文件
作者: angle    时间: 2014-4-4 11:32:25

factory 发表于 2014-4-2 16:42
是的,需要引用的页面加上,他就是一个JS文件

我把这段加上怎么不起作用,是不是后台还要做处理
作者: factory    时间: 2014-4-4 13:33:39

angle 发表于 2014-4-4 11:32
我把这段加上怎么不起作用,是不是后台还要做处理

不知道你为什么不起作用. 后台不需要你做什么处理,只要ajax交互完毕,不管正常不正常,只要交互过程结束,自然就会被ajaxcomplete监听到
作者: angle    时间: 2014-4-4 13:42:00

factory 发表于 2014-4-4 13:33
不知道你为什么不起作用. 后台不需要你做什么处理,只要ajax交互完毕,不管正常不正常,只要交互过程结束,自 ...

这段代码是加到<script type="text/javascript"></script>里吗
作者: factory    时间: 2014-4-4 14:14:08

angle 发表于 2014-4-4 13:42
这段代码是加到里吗

是的
作者: angle    时间: 2014-4-8 15:08:31

factory 发表于 2014-4-4 14:14
是的

为啥我加了 还是不起作用
作者: factory    时间: 2014-4-8 16:18:16

angle 发表于 2014-4-8 15:08
为啥我加了 还是不起作用

加到页面之后,你的页面上有ajax的交互,都会被监听到的,不可能没效果,你仔细检查是不是自己写错了
作者: angle    时间: 2014-4-8 17:00:50

factory 发表于 2014-4-8 16:18
加到页面之后,你的页面上有ajax的交互,都会被监听到的,不可能没效果,你仔细检查是不是自己写错了 ...
  1. $(document).ajaxComplete(function (evt, request, settings){
  2.             var text = request.responseText;
  3.             //判断返回的数据内容,如果是超时,则跳转到登陆页面
  4.             if(text == "logout"){
  5.                 top.location = '/login.jsp';
  6.             }
  7.         })
复制代码
我就这样考过去了 感觉么起作用
作者: factory    时间: 2014-4-8 17:04:31

angle 发表于 2014-4-8 17:00
我就这样考过去了 感觉么起作用

断点看看,ajaxComplete进去了没.

if(text == "logout"){
                top.location = '/login.jsp';
            }

这个判断只是写的一个伪代码,

var text = request.responseText;这里才是你后台返回的信息




欢迎光临 jQuery MiniUI (http://miniui.com/discuss/) Powered by Discuz! X2