如何使空服务器响应在ExtJS表单提交中被视为失败

时间:2013-01-10 19:04:04

标签: ajax json forms extjs4

我有ExtJS 4 MVC架构风格的登录表单。也就是说,我有一个控制器和一个视图。

视图文件(仅显示组件创建部分):

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

在我的控制器中,我将登录按钮onLlick绑定到某个函数,在该函数内部,我使用这段代码将表单提交给服务器:

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?非常欢迎链接到官方文档或其他资源。
  3. 使用以下http://localhost/my_site/login.php时,我在开发者控制台中获得server,这是正确的。

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

2 个答案:

答案 0 :(得分:2)

您需要做的就是为响应设置HTTP标头!查看herehere

基本上你可以说,如果响应的状态代码不是“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标头的非常好的tutorialhere你在PHP中有一个例子!

我在服务器端使用C#,所以我不知道实际的php代码,但只要HTTP标头 200 OK Ext-JS就会调用success-method !

答案 1 :(得分:0)

  
      
  1. 是否可以将空响应视为failure,即让开发人员控制台记录一些   在这种情况下failureType
  2.   
  3. 为什么空响应被视为success?非常欢迎链接到官方文档或其他资源。
  4.   

Ext.form.submit()根据以下回复标记为失败 -

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

只要不包含success:false

,就不会将空响应视为请求失败

您可以找到有关此Here

的更多信息