项目分享九:客户端的异常处理
2015-12-27 14:19 麦舒 阅读(1535) 评论(0) 编辑 收藏 举报一、异常的处理
异常处理,是所有程序都应该有的功能,尤其是网络异常,在 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); });
写得比较简单,有任何疑问都可以给我留言。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述