惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Cyberwarzone
Cyberwarzone
Vercel News
Vercel News
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
aimingoo的专栏
aimingoo的专栏
B
Blog RSS Feed
A
About on SuperTechFans
T
The Blog of Author Tim Ferriss
爱范儿
爱范儿
腾讯CDC
S
SegmentFault 最新的问题
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
The Hacker News
The Hacker News
J
Java Code Geeks
大猫的无限游戏
大猫的无限游戏
B
Blog
IT之家
IT之家
Spread Privacy
Spread Privacy
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
C
Cisco Blogs
Recent Announcements
Recent Announcements
H
Hacker News: Front Page
AI
AI
I
InfoQ
H
Heimdal Security Blog
T
Threatpost
Cisco Talos Blog
Cisco Talos Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
I
Intezer
W
WeLiveSecurity
SecWiki News
SecWiki News
MongoDB | Blog
MongoDB | Blog
宝玉的分享
宝玉的分享
博客园 - 【当耐特】
云风的 BLOG
云风的 BLOG
T
Threat Research - Cisco Blogs
V2EX - 技术
V2EX - 技术
N
News and Events Feed by Topic
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
O
OpenAI News
阮一峰的网络日志
阮一峰的网络日志
T
Troy Hunt's Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
博客园 - 司徒正美
Apple Machine Learning Research
Apple Machine Learning Research
雷峰网
雷峰网
T
Tor Project blog
有赞技术团队
有赞技术团队
Schneier on Security
Schneier on Security
Last Week in AI
Last Week in AI

博客园 - 麦舒

网站访问速度的优化 ERP 订单打印的优化 页面 SEO 信息的优化 一个网站首页重构小记 广告播放软件的开发 项目分享八:基于按钮点击事件的弹窗 项目分享七:客户端防止表单重复提交 项目分享六:图片的延迟加载 项目分享五:H5图片压缩与上传 项目分享四:购物车页面的更新 项目分享三:页面之间的传值 项目分享二:APP 小红点中数字的处理 项目分享一:在项目中使用 IScroll 所碰到的那些坑 微信开发——通过授权获取用户的基本信息 千呼万唤岂出来,写款软件不容易——Visual Entity 2.0 发布 实现虽易,写好不易——小玩意也能体现编码功力,微信消息处理框架发布 代码重构之 —— 一堆if、esle 逻辑的处理 ALinq Dynamic 使用指南——慨述(上) ALinq Dynamic 使用指南——代码的获取与编译
项目分享九:客户端的异常处理
麦舒 · 2015-12-27 · via 博客园 - 麦舒

项目分享九:客户端的异常处理

2015-12-27 14:19  麦舒  阅读(1618)  评论()    收藏  举报

一、异常的处理

异常处理,是所有程序都应该有的功能,尤其是网络异常,在 APP 更是常见。我们来看看 ChiTu Store 是如何处理异常。异常主要分两种情况:

1、服务端引发的异常,也就是服务端返回来的错误信息,当服务端异常后,返回的错误JSON信息为:

{
     Type: 'ErrorObject',
     Code:'xxxx' 
}

2、客户端出现的异常,客户端出现的异常,绝大数为网络异常,ChiTu Store 主要处理这类的异常。

我们现在要看一下 ChiTu Store 是如何处理的。

二、重写 Ajax 函数

通过重写 ajax 函数,来捕获服务端返回来的错误信息。就是 if (data.Type == 'ErrorObject') 这句话,如果是错误信息,就会引发一个错误的事件,即:services.error.fire(data, textStatus, jqXHR),

所有监听 services.error 事件的,都是收到这个错误。

    var _ajax = $.ajax;
    $.extend($, {
        ajax: function (options) {
            options.data = options.data || {};
            var result = $.Deferred();
            _ajax(options).done($.proxy(function (data, textStatus, jqXHR) {
                if (data.Type == 'ErrorObject') {
                    if (data.Code == 'Success') {
                        this._result.resolve(data, textStatus, jqXHR);
                        return;
                    }

                    if ($.isFunction(this._result.element)) {
                        data.element = this._result.element();
                    }

                    services.error.fire(data, textStatus, jqXHR);
                    this._result.reject(data, textStatus, jqXHR);

                    return;
                }

                this._result.resolve(data, textStatus, jqXHR);
            }, { _result: result }))
                .fail($.proxy(function (jqXHR, textStatus) {

                    var err = { Code: textStatus, status: jqXHR.status, Message: jqXHR.statusText };
                    if ($.isFunction(this._result.element)) {
                        err['element'] = this._result.element();
                    }

                    services.error.fire(err);
                    this._result.reject(err);
                }, { _result: result }));



            return result;
        }
    });

三、监听并处理错误

找到 ErrorHandler.ts 文件,所有的错误信息,都是在这里处理的。services.error.add 是用来监听错误事件的,可以看得出来,如果是没有登录,就会跳转到登录页面,让用户进行登录,否则就调用 ShowError 函数,来显示错误。

services.error.add(function (error) {
    if (error.Code == 'NotLogin' || error.Code == 'TokenRequired') {
        var return_url = '';
        if (location.hash.length > 1)
            return_url = location.hash.substr(1);

        return app.showPage('User_Login', { redirectUrl: return_url });
    };
    showError(error);
});

写得比较简单,有任何疑问都可以给我留言。

项目分享八:基于按钮点击事件的弹窗

项目分享七:客户端防止表单重复提交

项目分享六:图片的延迟加载

项目分享五:H5图片压缩与上传 

项目分享四:购物车页面的更新 

项目分享三:页面之间的传值

项目分享二:APP 小红点中数字的处理

项目分享一:在项目中使用 IScroll 所碰到的那些坑