关于在store load的时候服务器返回错误信息或服务器出错的处理。ExtJS4应该也能用,没测试过。

这里有两种情况:

  1. 服务器返回错误json错误信息,状态为200
  2. 服务器异常,状态为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错误信息或异常的处理的更多相关文章

  1. 设置了responseType:Blob之后,如果返回json错误信息,如果获取?

    最近做了一个文件下载功能,于是设置了responseType: Blob的方式, 什么是Blob呢,MDN官方解释:Blob 对象表示一个不可变.原始数据的类文件对象.Blob 表示的不一定是Java ...

  2. 使用spring webflow,在前台页面中如何显示后端返回的错误信息

    刚刚接触spring webflow,相关的资料并不是很多,并且大都是那种入门的 .xml文件的配置. 用到的CAS 最新的4.0版本用的就是web-flow流,前台页面使用的是表单提交.于是我就碰到 ...

  3. .net core 返回业务错误(不抛异常)

    在开始之前你需要知道: 1.通过抛异常--全局捕获异常的方式返回业务错误信息性能是非常差的(不知道为什么的可以百度一下) 2.如何将错误信息绑定到mvc模型验证中 自定义返回内容 //返回内容接口 p ...

  4. axios 利用new FileReader() 下载文件获取返回的错误信息

    this.axios({           method: "post",           url: url,           data: data,           ...

  5. 24. [Ext JS 4] 实战之Load Mask(加载遮罩)的显示与隐藏

    转自:https://blog.csdn.net/oscar999/article/details/27176791

  6. 后台返回json可能会出现的异常解析:java.lang.IllegalStateException: WRITER

    在使用filter做权限管理限制访问时,经常是在数据可以正确返回时,在后台日志中却有这个异常抛出,这个现象让人不禁想去一探究竟. 我要做的是在一个filter中拦截所有的请求,并且根据拿到的请求中的参 ...

  7. SpringMvc 全局异常处理器定义,友好的返回后端错误信息

    import com.google.common.collect.Maps; import org.apache.log4j.Logger; import org.springframework.be ...

  8. VC2010 _com_error 返回的错误信息

    CString GetComError(const _com_error& e) { CString sMsg; sMsg.Format( _T("HRESULT: 0x%08lx; ...

  9. ajax返回json在 IE下,提示打开或保存的解决方法

    Content-type要设置成 text/html 我是用的mvc jquery.form.js 提交的表单. 返回json响应数据. 结果在ie下提示打开或保存,查看保存的内容.就是我返回的jso ...

随机推荐

  1. redis命令的使用

    批量删除特定前缀的keys redis-cli KEYS "prefix:*" | xargs redis-cli DEL 返回list的长度 > LPUSH test &q ...

  2. 从零开始玩转JMX(四)——Apache Commons Modeler & Dynamic MBean

    Apache Commons Modeler 前面的Model MBean的创建方式看上去特别复杂,一个简单功能的类ModelMBeanUtils 写了很多代码,那有木有简单点的方式呢,答案是肯定的, ...

  3. GDOI2017 五一游玩记

    GDOI2017 到辣! 在五一比赛,成功躲了两天文化课. Day 0 早上睡到挺晚,想着同学在上课,我在睡觉,暗爽... 动车上,拿起电脑就是颓废,打模板!(然而真相是打了两个模板就开始颓了) 一天 ...

  4. linux(一)export的生命周期

    本文从shell执行的角度分析export变量的生命周期 # 只对当前shell环境起作用,比如通过不同的远程ssh就是不同的shell环境 export k=v 当运行一个.sh文件或者是shell ...

  5. Putting Apache Kafka To Use: A Practical Guide to Building a Stream Data Platform-part 1

    转自: http://www.confluent.io/blog/stream-data-platform-1/ These days you hear a lot about "strea ...

  6. wireshark抓包分析

    TCP协议首部: 分析第一个包: 源地址:我自己电脑的IP,就不放上来了 Destination: 222.199.191.33 目的地址 TCP:表明是个TCP协议 Length:66 表明包的长度 ...

  7. arm-linux-gcc安装使用教程

    arm-linux-gcc如何下载安装2(转) [转]ubuntu下交叉编译环境构建(arm-linux-gcc-3.4.1.tar.bz2 ) 2009-03-03 10:05 1.下载arm-li ...

  8. linux ps 命令参数详解

    -a 显示所有终端机下执行的进程,除了阶段作业领导者之外. a 显示现行终端机下的所有进程,包括其他用户的进程. -A 显示所有进程. -c 显示CLS和PRI栏位. c 列出进程时,显示每个进程真正 ...

  9. 前端要不要学数据结构&算法

    我们都知道前端开发工程师更多偏向 DOM 渲染和 DOM 交互操作,随之 Node 的推广前端工程师也可以完成服务端开发.对于服务端开发而言大家都觉得数据结构和算法是基础,非学不可.所以正在进行 No ...

  10. 一、nginx 安装

    添加官方 yum 源 vim /etc/yum.repos.d/nginx.rep 输入以下内容(OS为你的系统,OSRELEASE 系统版本) [nginx] name=nginx repo bas ...