1

ExtJS 4 MVC アーキテクチャ スタイルのログイン フォームがあります。つまり、1 つのコントローラーと 1 つのビューがあります。

ビュー ファイル (コンポーネント作成部分のみが表示されます):

initComponent: function() {
    this.items = [
        {border:false, baseCls: 'x-plain', flex:8}, // 13/8 - is golden ratio (approx.)
        {
            border: false,
            baseCls: 'x-plain',
            layout: {
                type: 'vbox',
                pack: 'center',
                align: 'center'
            },
            items: [
                {
                    xtype: 'form',
                    url: 'http://localhost/my_site/login.php',
                    title: 'login_form_title',
                    bodyPadding: 5,
                    width: 280,

                    fieldDefaults: {
                        labelAlign: 'right',
                        labelWidth: 90,
                        anchor: '100%'
                    },

                    items: [
                        {
                            xtype: 'textfield',
                            name: 'username',
                            fieldLabel: 'username',
                            allowBlank: false
                        },
                        {
                            xtype: 'textfield',
                            inputType: 'password',
                            name: 'password',
                            fieldLabel: 'password',
                            allowBlank: false
                        },
                        {
                            border: false,
                            baseCls: 'x-plain',
                            layout: {
                                type: 'hbox',
                                pack: 'center',
                                align: 'center'
                            },
                            items: [
                                {
                                    xtype: 'button',
                                    formBind: true,
                                    disabled: true,
                                    text: 'login',
                                    action: 'login'
                                }
                            ]
                        }
                    ]
                }
            ]
        },
        {border:false, baseCls: 'x-plain', flex:13} // 13/8 - is golden ratio (approx.)
    ];
    this.callParent(arguments);
}

私のコントローラーでは、ログインボタンのonclickをいくつかの関数にバインドし、その関数内で次のコードを使用してフォームをサーバーに送信しています。

oForm.submit({
    success: function(form, action) {
        console.log('success');
    },

    failure: function(form, action) {
        console.log(action.failureType);
    }
});

そしてこれはhttp://localhost/my_site/login.php

<?php
exit;

ログインボタンを押すとsuccess、開発者コンソールに表示されます。質問は次のとおりです。

  1. 空の応答を と見なすこと、つまり、その場合にfailure開発者コンソールにログを記録させることは可能ですか?failureType
  2. 空の応答が と見なされるのはなぜsuccessですか? 公式ドキュメントや他のリソースへのリンクは大歓迎です。

以下を使用するhttp://localhost/my_site/login.phpserver、正しい開発者コンソールが表示されます。

<?php
echo json_encode(
    array(
        'success'=>false, 
        'errors' => array(
            'reason' => 'Invalid username or password'
        )
    )
);
exit;
4

2 に答える 2

2

応答用の HTTP ヘッダーを設定するだけです。こちらこちらをご覧ください

基本的に、レスポンスのステータス コードが「200 Success」でない場合、ExtJS は失敗メソッドを呼び出します。

あなたの場合、次のことを行う必要があります。

<?php
header('WWW-Authenticate: Basic realm="Top Secret Files"');
header("HTTP/1.0 401 Unauthorized");
?>

また、正しいコンテンツ タイプを設定する必要があります。デフォルトは「text/plain」ですが、この場合は「application/json」に設定する必要があります。application/json に設定しない場合は、応答を手動で解析する必要があります。それ以外の場合は、ExtJS が処理します。

header('Content-type: application/pdf');

ここには、HTTP ヘッダーに関する非常に優れたチュートリアルがあります。そして、ここに PHP の例があります。

サーバー側でC#を使っているので、実際のphp-codeはわかりませんが、HTTPヘッダーさえあれば200OK Ext-JSがsuccess-methodを呼び出してくれます!

于 2013-01-11T07:28:54.383 に答える
0
  1. 空の応答を と見なすこと、つまり、その場合にfailure開発者コンソールにログを記録させることは 可能ですか?failureType
  2. 空の応答が と見なされるのはなぜsuccessですか? 公式ドキュメントや他のリソースへのリンクは大歓迎です。

Ext.form.submit()次の応答に基づいて失敗としてマークされます -

{
    success: false,
    errors: {
        clientCode: "Client not found",
        portOfLoading: "This field must not be null"
    }
}

空の応答は、含まれていない限り、要求の失敗とは見なされません。success:false

詳細はこちら

于 2013-01-10T19:47:14.333 に答える