为什么我的Ext.form.FormPanel发布空值?

时间:2011-08-09 04:30:29

标签: null http-post sencha-touch

在我的应用程序中,我有一个应该发布到我的网络服务的FormPanel

我的FormPanel布局如下。

var config = {
    // Url for the Web Service - Note that the WebServiceURL MUST end with a trailing "/"
    WebServiceUrl: 'http://webservice.example.com/'
};

function WebService(controller, action) {
    return(config.WebServiceUrl + controller + '/' + action);
};

rpc.views.Contact.CommunicateCard = new Ext.form.FormPanel({
    items: [{
        xtype: 'fieldset',
        id: 'loginFormSet',
        title: '',
        items: [
            {
                xtype: 'emailfield',
                placeHolder: 'Username',
                name: 'Username',
                id: 'Username',
                required: true
            }, {
                xtype: 'passwordfield',
                placeHolder: 'Password',
                name: 'Password',
                required: true
            }, {
                xtype: 'checkboxfield',
                id: 'RememberMe',
                name: 'RememberMe',
                label: 'Save login?',
                labelWidth: '40%'
            },
            {
                xtype: 'button',
                text: 'Login',
                ui: 'confirm',
                style: 'margin:2%;',
                handler: function() {
                    doLogin();
                }
            }
        ]
    }]
});


var doLogin = function () {
    Ext.Ajax.request({
        url: WebService('GetInTouch', 'CommunicateCard'),
        method: 'post',
        params: { UserName: rpc.views.Contact.CommunicateCard.getValues().Username, Password: rpc.views.Contact.CommunicateCard.getValues().Password, RememberMe: Ext.getCmp('RememberMe').isChecked() }
    });
};

问题在于,当我按“提交”并在Fiddler / Charles中观看帖子时,我看不到任何表单值。此外,当我的Web服务收到请求时,它也不会收到表单值。

以下是Charles

的HTTP响应
  
    

OPTIONS / GetInTouch / CommunicateCard HTTP / 1.1
    主持人:webservice.example.com
    推荐人:http://192.168.5.206/     访问控制请求方法:POST
    来源:http://192.168.5.206
    用户代理:Mozilla / 5.0(Macintosh; Intel Mac OS X 10_7_0)AppleWebKit / 534.24(KHTML,与Gecko一样)Chrome / 11.0.696.71 Safari / 534.24
    访问控制请求标题:X-Requested-With,Content-Type
    接受: /
    Accept-Encoding:gzip,deflate,sdch
    接受语言:en-US,en; q = 0.8
    Accept-Charset:ISO-8859-1,utf-8; q = 0.7,*; q = 0.3

  

我正试图从这里采取一些方向 http://mhelpdesk.com/simple-login-form-using-asp-net-mvc-and-sencha-touch/


根据Chrixian的回答,我也尝试了以下代码并得到了相同的结果。

rpc.views.Contact.CommunicateCard = new Ext.form.FormPanel({
    items: [{
        xtype: 'fieldset',
        id: 'loginFormSet',
        title: '',
        items: [
            {
                xtype: 'emailfield',
                placeHolder: 'Username',
                name: 'Username',
                id: 'Username',
                required: true
            }, {
                xtype: 'passwordfield',
                placeHolder: 'Password',
                name: 'Password',
                required: true
            }, {
                xtype: 'checkboxfield',
                id: 'RememberMe',
                name: 'RememberMe',
                label: 'Save login?',
                labelWidth: '40%'
            },
            {
                xtype: 'button',
                text: 'Login',
                ui: 'confirm',
                style: 'margin:2%;'
            }
        ],
        submit: {
            url: WebService('GetInTouch', 'CommunicateCard'),
            waitMsg: 'submitting',
            success: function(form, response, responseText) {  },
            failure: function(form, response, responseText) {  } 
        }
    }]
});

1 个答案:

答案 0 :(得分:1)

您粘贴的HTTP请求不是POST,它为HTTP方法说“OPTIONS”。

我看不到任何语法错误,你的FormPanel和doLogin函数确实会发布你在params中定义的3条信息...我不知道你要为url返回什么在WebService('GetInTouch', 'CommunicateCard'),因为你没有发布该功能。

另外,虽然使用Ext.Ajax提交表单没有任何问题,但formpanel提供了Ext.Ajax的快捷方式来实现同样的目的...

rpc.views.Contact.CommunicateCard.submit({
   url: 'someurl',
   waitMsg: 'submitting',
   success: function(form, response, responseText) { ... },
   failure: function(form, response, responseText) { ... }
});

所以你可以让它把重点放在帖子上等等。