Extjs:我需要将json异常捕获到表单提交响应中

时间:2012-11-14 20:27:06

标签: php json extjs override

我有一个表单提交数据并等待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)

有什么想法吗?提前谢谢。

1 个答案:

答案 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 );
}
});

它有效,但确保您在应用程序中运行此脚本一次。