在我的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) { }
}
}]
});
答案 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) { ... }
});
所以你可以让它把重点放在帖子上等等。