0
buttons: [
    {
        text: "Add User",
        id: "new-record-add-button",
        handler: function() {
            var form = this.up('form').getForm();
            form.submit({
                url: BasePath+'/main/admin/adduser',
                method: 'POST',
                waitTitle: 'Authenticating',
                waitMsg: 'Please Wait',
                success: function(form, action) {
                win.close()
                     Ext.Msg.show({
                         title:'Success'
                        ,msg:'User added successfully'
                        ,modal:true
                        ,icon:Ext.Msg.INFO
                        ,buttons:Ext.Msg.OK
                });
                },

            failure: function(form, action) {

                console.log(action.response.responseText);
                obj = Ext.JSON.decode(action.response.responseText);
                console.log(obj);
                Ext.Msg.alert('Error',obj.errors)
                form.reset();
            }
        })

                //this.up("window").close();
        }

    },
    {
        text: "Cancel",
        handler: function() {
            this.up("window").close();
        }
    }
]

フォームの失敗関数に到達すると、次のエラーが発生します。

Uncaught TypeError: Cannot read property 'responseText' of undefined 

これは私のphpコードです:

public function adduserAction()
{
            $response = new JsonModel();
            //$error = array();
            $errors="";
            if(!ctype_alpha($_POST["first_name"])) {
                $errors.="First Name cannot contain characters and numbers";
            }
            if(!ctype_alpha($_POST["last_name"])) {
                $errors.="Last Name cannot contain characters and numbers";
            }

            if(!filter_var($_POST['email_address'], FILTER_VALIDATE_EMAIL)) {
                $errors.="Email should be of the format john.doe@example.com";
            }
            if(empty($_POST["role"])) {
                $errors.="Role cannot be empty";
            }
            if($errors!="") {
                $response->setVariables(array("success"=>false, "errors"=>$errors));

            }
            else {
                $response->setVariables(array("success"=>true, "errors"=>$errors));

            }
            return $response;
}
4

2 に答える 2

0

responseTextExtJsのものです-echoデコードされる前にサーバーから(たとえば、を使用して)返される実際のテキストを表します。

ある種のサーバー例外がない限り、またはに設定した場合を除いて、operationまたはオブジェクト内の非同期コールバックで取得する必要があります。そのため、障害ハンドラーで取得しません。requestsuccessfalse

何が起こっているのかを本当に理解するには、Connection.jsを参照することをお勧めします。

于 2012-11-28T22:31:26.800 に答える
0

ExtJsを介してフォームを送信する場合、フォームの送信が成功すると、response.responseTextを{"sucess":"true"}として設定する必要があります。フォームをあるページに送信する場合は、このオブジェクトをバックエンドから返すことを確認する必要があります。または、既存のonSuccessメソッドをオーバーライドする必要があります。

2番目の方法は次のようなものです。

Ext.override(Ext.form.action.Submit、{

    onSuccess:function(response){
        var form = this.form、
            成功=true、
            結果=応答;
            response.responseText ='{"success":true}';
            form.afterAction(this、success);
        }
    });

このスニペットをアプリケーションに配置して、魔法を見てください。乾杯。:)

于 2013-06-05T09:41:29.417 に答える