关于在store load的时候服务器返回错误信息或服务器出错的处理。ExtJS4应该也能用,没测试过。
这里有两种情况:
- 服务器返回错误json错误信息,状态为200
- 服务器异常,状态为500
一、返回json错误信息的处理
在store获取json数据时,数据结构类似:
{
"users": [{
"id": 1,
"name": "Ed",
"orders": [{
"id": 10,
"total": 10.76,
"status": "invoiced"
},{
"id": 11,
"total": 13.45,
"status": "shipped"
}]
}]
}
这是正常的数据。
但是服务器如果判断用户没有登录或者没有权限等情况时,我们返回的错误信息数据结构应该为:
{
"success": false,
"error": "There was an error with your request"
}
与Ext.Ajax.request用法相似。
但是,在默认情况下,store不会处理success为false时的情况,也不会抛出异常。那怎么办呢?
我们先来看一下定义Store时的配置项:
var store = new Ext.data.Store({
fields : ['foo'],
proxy : {
type : 'ajax',
url : 'data.json',
reader : {
type : 'json',
rootProperty : 'data',
messageProperty : 'error'
}
}});
我们需要在Reader中添加配置项messageProperty,在你返回success为false的数据时,此配置项对应的json对象属性值将会在后面用上,此配置项配置为”error”。
然后我们就可以处理错误了,我们再回到Store里,先看看Store的load事件
store.on("load", function(store, records, successful, eOpts) {
if(!successful) {
var error = eOpts.getError();
}
});
有四个参数:
store, records, successful, eOpts
其中successful就是对应着服务器返回的JSON中的success属性,当success为false时successful参数也为false。在eOpts的error属性里我们可以等到reader中messageProperty配置的属性值。
即error变量的值为:”There was an error with your request”。
load里的callback和load事件都是可以的,这里的operation对应着事件中的eOpts参数。
store.load({
callback: function(records, operation, success) {
if (success) {
// ...
} else {
var error = operation.getError(); Ext.Msg.alert('Error', error);
}
}});
当然,如果你要根据情况来处理不同的错误,你在服务器传过来的数据error为错误代码或对象,前端再按照不同的error值来处理。
二、服务器异常
例如500错误,用法与上述一样,只是eOpts中的error不为你配置的值,而是一个object,这个对象有三个属性:
- response:服务器返回的信息
- status:状态值,如果找不到服务器,为0,服务器内部错误,为500
- statusText:错误标题
处理方法可以根据status处理,response.responseText为服务器返回的文本。
本文只提供方法,细节可console.dir(eOpts)输出查看。
完整代码如下,其他的store继承此类即可:
JavaScript
Ext.define("HandPlm.ux.store.Base", {
extend: "Ext.data.Store",
constructor: function () {
var me = this;
me.callParent(arguments); me.on("load", function (store, records, successful, eOpts) {
if (successful === false) {
var error = eOpts.getError();
if (typeof error === "string") {
Ext.Msg.alert("错误", eOpts.getError());
}
if (typeof error === "object") {
switch (error.status) {
case 0:
Ext.Msg.alert("错误", "找不到服务器");
break;
case 500:
Ext.Msg.alert("服务器内部错误", error.response.responseText);
break;
default:
console.error(error);
}
}
}
});
}
});
不要忘记配置Reader中的messageProperty
Ext JS 5 关于Store load返回json错误信息或异常的处理的更多相关文章
-
设置了responseType:Blob之后,如果返回json错误信息,如果获取?
最近做了一个文件下载功能,于是设置了responseType: Blob的方式, 什么是Blob呢,MDN官方解释:Blob 对象表示一个不可变.原始数据的类文件对象.Blob 表示的不一定是Java ...
-
使用spring webflow,在前台页面中如何显示后端返回的错误信息
刚刚接触spring webflow,相关的资料并不是很多,并且大都是那种入门的 .xml文件的配置. 用到的CAS 最新的4.0版本用的就是web-flow流,前台页面使用的是表单提交.于是我就碰到 ...
-
.net core 返回业务错误(不抛异常)
在开始之前你需要知道: 1.通过抛异常--全局捕获异常的方式返回业务错误信息性能是非常差的(不知道为什么的可以百度一下) 2.如何将错误信息绑定到mvc模型验证中 自定义返回内容 //返回内容接口 p ...
-
axios 利用new FileReader() 下载文件获取返回的错误信息
this.axios({ method: "post", url: url, data: data, ...
-
24. [Ext JS 4] 实战之Load Mask(加载遮罩)的显示与隐藏
转自:https://blog.csdn.net/oscar999/article/details/27176791
-
后台返回json可能会出现的异常解析:java.lang.IllegalStateException: WRITER
在使用filter做权限管理限制访问时,经常是在数据可以正确返回时,在后台日志中却有这个异常抛出,这个现象让人不禁想去一探究竟. 我要做的是在一个filter中拦截所有的请求,并且根据拿到的请求中的参 ...
-
SpringMvc 全局异常处理器定义,友好的返回后端错误信息
import com.google.common.collect.Maps; import org.apache.log4j.Logger; import org.springframework.be ...
-
VC2010 _com_error 返回的错误信息
CString GetComError(const _com_error& e) { CString sMsg; sMsg.Format( _T("HRESULT: 0x%08lx; ...
-
ajax返回json在 IE下,提示打开或保存的解决方法
Content-type要设置成 text/html 我是用的mvc jquery.form.js 提交的表单. 返回json响应数据. 结果在ie下提示打开或保存,查看保存的内容.就是我返回的jso ...
随机推荐
-
WebService的介绍概念 收藏
WebService学习总结(二)——WebService相关概念介绍 一.WebService是什么? 1. 基于Web的服务:服务器端整出一些资源让客户端应用访问(获取数据) 2. 一个跨语言.跨 ...
-
Linux共享库 socket辅助方法
//sockhelp.h#ifndef _vx #define _vx #ifdef __cplusplus extern "C" { #endif /** * readn - 读 ...
-
---ps 命令
ps 的命令真复杂啊! 值得注意的是选项的 -e e 这两个是不同的 -e的选项和x的意思相当 而e 的意思是改变显示栏目内容了 我个人用单字母的比较多 ps f -eo pid,uid,gid,us ...
-
iOS面试题01
1.#import和#include.@class有什么区别?#import<>和#import“”又有什么区别? 答:1.#import和#include都能完整地包含某个文件的内容,# ...
-
7款适用老旧设备并对初学者非常友好的轻量级Linux发行版
我们由从 7 到 1 的顺序向大家介绍. 7. Linux Lite 正如其名,Linux Lite 是 Linux 发行版的一个轻量级版本,用户并不需要强大的硬件就可以将它跑起来,而且其使用非常简单 ...
-
PHP数组的定义和遍历
//常用函数//生成随机数//echo rand(3,33); //两个参数来确定随机数的范围为3-33 //日期时间函数echo time(); //取当前时间的UNIX时间戳//date_defa ...
-
SQL Server(函数) 关键字的使用 三
三, 函数关键字 -- 使用介绍 28, Function的使用(Function的内建 SQL函数)? 内建 SQL 函数的语法是: SELECT function(列) FROM 表) 29, a ...
-
免费DDOS攻击测试工具大合集
FreeBuf微科普: DoS(Denial Of Service)攻击是指故意的攻击网络协议实现的缺陷或直接通过野蛮手段残忍地耗尽被攻击对象的资源,目的是让目标计算机或网络无法提供正常的服务或资源访 ...
-
Html5 touch event
HTML5 for the Mobile Web: Touch Events POSTED BY RUADHAN - 15 AUG 2013 See also... Touch-friendly Dr ...
-
Ubuntu安装Flash视频插件
http://www.linuxidc.com/Linux/2014-05/101095.htm