关于在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. JAVA基础补漏--文件读取

    public class Test2 { public static void main(String[] args) throws IOException { FileInputStream fis ...

  2. The OAuth 2.0 Authorization Framework: Bearer Token Usage

    https://tools.ietf.org/html/rfc6750 1.2. Terminology Bearer Token A security token with the property ...

  3. kylin入门到实战:cube详述

    版权申明:转载请注明出处. 文章来源:http://bigdataer.net/?p=306 排版乱?请移步原文获得更好的阅读体验 1.什么是cube? cube是所有dimession的组合,每一种 ...

  4. springMVC注解的入门案例

    1.web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi=&qu ...

  5. 返回值过长时被nginx截断的解决办法

    今天在写接口时碰到了这个问题,返回json格式的数据,但是被截断了经过排查,才发现是数据过大超出缓冲区最大容量,而将数据写入临时文件时又没有权限,所以再返回时,超出缓冲区的数据将丢失解决方法:给fas ...

  6. location的部分属性

    http://www.w3school.com.cn/jsref/dom_obj_location.asp location.host 可以设置或返回主机名和当前url的端口    www.w3sch ...

  7. 利用Object.defineProperty实现Vue数据双向绑定

    body部分很简单,一个输入框和一个展示的div <div> <p>你好,<input id='nickName'></p> <div id=&q ...

  8. CA证书,https讲解

    关于具体连接过程,https://blog.csdn.net/wangjun5159/article/details/51510594 这篇博客写的应该比较准确. 我的理解,其中关键的一点是 http ...

  9. IntelliJ IDEA 返回上次编辑(鼠标停留)的地方

    idea默认的是 : Ctrl + Alt + 左箭头,与笔记本的 旋转屏幕冲突: 找到: 我更改成了: Ctrl + CapsLock :暂时没发现冲突.

  10. UVA-10765 Doves and bombs (双连通分量)

    题目大意:给一个n个点的无向连通图,找出删除某个点后的连通块个数. 题目分析:统计一下每个节点属于几个双连通分量,若是割点,得到的便是答案,否则答案为1. 代码如下: # include<ios ...