我有一个表单提交数据并等待json响应,但是当表单尝试将responseText解析为JSON时,PHP上的一些错误/警告/通知引发了一个javascript异常。
有没有办法在表单之前捕获错误或执行我的验证?
我尝试重写Ext.JSON.decode,但由于某种原因,即使控制台错误显示如下,表单也不会使用该定义
Uncaught Ext.JSON.decode(): You're trying to decode an invalid JSON String: my wrong json test!! ext-all.js:21
Ext.Error.Ext.extend.statics.raise ext-all.js:21
Ext.JSON.me.decode ext-all.js:21 <-- why Ext.JSON.[me].decode?
Ext.define.handleResponse ext-all.js:21
Ext.define.processResponse ext-all.js:21
Ext.define.onSuccess ext-all.js:21
Ext.apply.callback ext-all.js:21
Ext.define.onComplete ext-all.js:21
Ext.define.onStateChange ext-all.js:21
(anonymous function)
有什么想法吗?提前谢谢。
答案 0 :(得分:6)
我知道,您的评论是正确的,但有时会突然出现服务器配置或意外问题,我希望最终用户可以发送错误或至少不会破坏应用程序。我找到了一个解决方法。重写Ext.form.action.Submit并将非json响应封装到有效的json对象中。之后,调用原始onSuccess
Ext.override(Ext.form.action.Submit,{
onSuccess: function( pResponse ){
try{
eval( "(" + pResponse.responseText + ')' );
}catch(e){
pResponse.responseText = '{ success: false, info: "' + pResponse.responseText.replace(/"/g, '\\"') + '" }';
}
this.callParent( arguments );
}
});
它有效,但确保您在应用程序中运行此脚本一次。