Ext JS 5 关于Store load返回json错误信息或异常的处理
关于在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 ...
随机推荐
- 【读书笔记】《深入浅出nodejs》第四章 异步编程
1. 异步编程的基础 -- 函数式编程 (1)高阶函数 -- 是可以把函数作为参数,或是将函数作为返回值的函数. (2)偏函数用法 -- 创建一个调用另外一个部分 -- 参数或变量已经预置的函数 -- ...
- webservice用cxf发布REST
1.新建一个java项目 2.导入cxf相关的jar包,并部署到项目中 3.bean类 package com.xiaostudy; import javax.xml.bind.annotation. ...
- Pandas 高级应用 数据分析
深入pandas 数据处理 三个阶段 数据准备 数据转化 数据聚合 数据准备 加载 组装 合并 - pandas.merge() 拼接 - pandas.concat() 组合 - pandas.Da ...
- 从0开始 图论学习 邻接表 STL vector
邻接表表示 用vector实现 writer:pprp 代码如下: #include <bits/stdc++.h> using namespace std; const int maxn ...
- sa learning
后缀数组之前一直在给队友搞,但是这个类太大了,预感到青岛八成会有,于是自己也学习一下,记录一下做题的历程 所用的模板暂时来自于队友的倍增nlogn da算法 int t1[maxn] , t2[max ...
- mac配置jenkins遇到的问题及解决办法
写这篇博客的时候,我暂时放弃了mac配置jenkins,先记着遇到的坑吧.虽然无数次想砸电脑,但是回头想想,对于经常用windows系统和接触过linux的测试的我来说,这也是个熟悉mac系统的机会. ...
- Vue-cli add sass modules
终端cd至要安装的文件夹中 再执行以下命令 安装node-sass 和 sass-loader npm i node-sass sass-loader --save-dev 在需要使用scss地方引入 ...
- 简单的使用hibernate插入数据的例子
数据库创建脚本: drop table person create table person( id varchar(32) not null primary key ...
- 学习webpack3.x过程中遇到的问题:webpack-dev-server
这篇博客主要记录的是本人在学习webpack3.x的过程中遇到的问题(虽然这几天4.0刚出来,但是我还是先学一下3.x吧) 1.配置文件可以用webpack启服务和热更新,步骤如下: ① 先下载:we ...
- flex-wrap:wrap弹性盒布局,自动换行
给父盒子ul{display:flex; flex-wrap:wrap; }