Sencha Architect 4.2 Ext 7.3.x classic 循环结构转JSON报错解决方案问询
问题触发原因
Ext 7.3.x classic版本对Ajax Proxy的默认参数序列化逻辑做了调整,当Store绑定的Model存在关联字段、或者Proxy的extraParams中不小心引入了组件实例、Store实例这类带循环引用的对象时,新版序列化逻辑未做循环引用检测,会直接尝试将完整对象转为JSON字符串,就会抛出Converting circular structure to JSON错误。6.2.x版本的序列化逻辑会自动跳过非基础类型的参数项,因此不会触发报错。
解决/规避方案
- 方案1:重写全局Ajax Proxy的参数序列化方法,过滤非基础类型参数,避免循环引用
Ext.override(Ext.data.proxy.Ajax, { encodeParams: function(params) { const filteredParams = {}; Object.keys(params).forEach(key => { const val = params[key]; // 仅保留基础类型、null、日期类型参数 if (typeof val !== 'object' || val === null || val instanceof Date) { filteredParams[key] = val; } }); return Ext.Object.toQueryString(filteredParams); } }); - 方案2:不需要修改全局逻辑的场景下,单独给当前用到的Store的Proxy添加配置
paramsAsJson: false,强制使用表单格式传参而非JSON序列化传参,即可绕过该问题 - 方案3:升级Ext版本到7.4.x及以上正式版,该序列化逻辑缺陷已在后续版本被官方修复
内容的提问来源于stack exchange,提问作者JSSKTL
相关产品推荐
相关产品推荐

