第一次在这个账号上发帖,多么令人兴奋。遗憾的是,内容没有那么令人兴奋。我在reader.json
函数getResponseData
中发现了一个非常简单的bug。
我希望在我的应用程序中有正确的错误处理,如果我正在查询的服务器意外地没有提供给我有效的JSON。读取器有一个异常事件,正是这个问题。但是,reader.json
将XHR上的responseType
设置为"json"
。
如here所示,这将在XHR上的response.response
中产生null
值:
当将responseType设置为特定值时,作者应该确保服务器实际发送的响应与该格式兼容。如果服务器返回的数据与所设置的responseType不兼容,则response的值将为空。getResponseData
希望避免工作,因此将返回responseJson
,如果这是一个对象:
if (typeof response.responseJson === 'object') {
return response.responseJson;
}
然而,在Chrome版本中,我使用的typeof null
计算结果为"object"
。
我在我的应用程序中修复了这个问题,方法是覆盖函数并将上面的第一行替换为if (Ext.isObject(response.responseJson)) {
,但我认为应该在框架代码中修复这个问题。
我不是真的在寻找答案,但一些对 Sencha 的React会很好。
这是张贴在这里,因为我浏览了https://stackoverflow.blog/2019/10/30/why-sencha-is-moving-its-support-forums-to-stack-overflow/
版本信息
- ExtJS发布版本7.4.0
- 谷歌浏览器版本92.0.4515.131(64位)
编辑:看来我的文字对我的问题还不够明确,所以我在这里添加一个例子。我有一个商店,看起来像这样:
Ext.define('myCoolStore', {
extend: 'Ext.data.Store',
constructor: function(cfg) {
var me = this;
cfg = cfg || {};
me.callParent([Ext.Object.merge({
proxy: {
type: 'ajax',
withCredentials: true,
reader: {
type: 'json',
rootProperty: 'results'
},
listeners: {
exception: {
fn: me.onAjaxException,
scope: me
}
}
}
}, cfg)]);
},
onAjaxException: function(proxy, response, operation, eOpts) {
// ..
}
});
现在,如果我执行myCoolStore.load()
,我期望服务器响应如下:
{
"success": true,
"deprecated": false,
"results": [{
"id": "11730",
"bericht_id": "167",
"projekt_id": "1429",
"lastedit": "2021-08-10 16:01:20",
"lastedit_mitarbeiter_id": "182"
}],
"errors": [],
"messages": [],
"total": 1,
"metaData": null
}
但是,服务器可能会被窃听并返回其他内容,即无效的JSON。
[..date..] [php7:notice] [pid ..pid..] [client ..ip..] PHP Notice: Trying to get property 'myCoolProperty' of non-object in file.class.php on line 80, referer: ..myCoolSite..
{
"success": true,
"deprecated": false,
"results": [{
"id": "11730",
"bericht_id": "167",
"projekt_id": "1429",
"lastedit": "2021-08-10 16:01:20",
"lastedit_mitarbeiter_id": "182"
}],
"errors": [],
"messages": [],
"total": 1,
"metaData": null
}
reader.json
的默认行为不会在这里设置异常,因为XHR将无法解析它,导致reponseJson
成为null
,这将通过typeof
-check。
1条答案
按热度按时间bwleehnv1#
根据RFC7159规范,
null
是一个有效的JSON值:JSON值必须是对象、数组、数字或字符串,或者是以下三个文字名称之一:
假空真
所以我认为这是预期的行为,而不是一个bug。如果你想自定义如何处理响应,你可以尝试以下两种方法之一。
1.定义全局请求异常处理程序
在您的
Application.js
中执行如下操作:2.创建自定义读取器以截获响应的转换方式
这样定义读者:
并在需要时使用此阅读器: