0

データを送信して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)

何か案が?前もって感謝します。

4

1 に答える 1

7

あなたのコメントは正しいですが、サーバー構成や予期しない問題が突然発生することがあり、最終的なユーザーがエラーを送信するか、少なくともアプリを壊さないようにしたいと思います。回避策を見つけました。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 );
}
});

動作しますが、アプリケーションでこのスクリプトを1回実行するようにしてください。

于 2012-11-15T01:20:20.237 に答える