关于在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. 【读书笔记】《深入浅出nodejs》第四章 异步编程

    1. 异步编程的基础 -- 函数式编程 (1)高阶函数 -- 是可以把函数作为参数,或是将函数作为返回值的函数. (2)偏函数用法 -- 创建一个调用另外一个部分 -- 参数或变量已经预置的函数 -- ...

  2. webservice用cxf发布REST

    1.新建一个java项目 2.导入cxf相关的jar包,并部署到项目中 3.bean类 package com.xiaostudy; import javax.xml.bind.annotation. ...

  3. Pandas 高级应用 数据分析

    深入pandas 数据处理 三个阶段 数据准备 数据转化 数据聚合 数据准备 加载 组装 合并 - pandas.merge() 拼接 - pandas.concat() 组合 - pandas.Da ...

  4. 从0开始 图论学习 邻接表 STL vector

    邻接表表示 用vector实现 writer:pprp 代码如下: #include <bits/stdc++.h> using namespace std; const int maxn ...

  5. sa learning

    后缀数组之前一直在给队友搞,但是这个类太大了,预感到青岛八成会有,于是自己也学习一下,记录一下做题的历程 所用的模板暂时来自于队友的倍增nlogn da算法 int t1[maxn] , t2[max ...

  6. mac配置jenkins遇到的问题及解决办法

    写这篇博客的时候,我暂时放弃了mac配置jenkins,先记着遇到的坑吧.虽然无数次想砸电脑,但是回头想想,对于经常用windows系统和接触过linux的测试的我来说,这也是个熟悉mac系统的机会. ...

  7. Vue-cli add sass modules

    终端cd至要安装的文件夹中 再执行以下命令 安装node-sass 和 sass-loader npm i node-sass sass-loader --save-dev 在需要使用scss地方引入 ...

  8. 简单的使用hibernate插入数据的例子

    数据库创建脚本: drop table person create table person( id          varchar(32)         not null primary key ...

  9. 学习webpack3.x过程中遇到的问题:webpack-dev-server

    这篇博客主要记录的是本人在学习webpack3.x的过程中遇到的问题(虽然这几天4.0刚出来,但是我还是先学一下3.x吧) 1.配置文件可以用webpack启服务和热更新,步骤如下: ① 先下载:we ...

  10. flex-wrap:wrap弹性盒布局,自动换行

    给父盒子ul{display:flex; flex-wrap:wrap; }