Android 带有Ajax请求的Sencha 2.0本机应用程序
我正在尝试使用Sencha(无Phonegap)编写一个本机android应用程序,它能够通过get/post请求联系服务器。我已经将代码移植到浏览器中,但是当我将应用打包到.apk中并在模拟器上运行它时(我已经更新了它的hosts文件以包含测试服务器的ip),ajax请求失败,状态代码为0 我不确定这是否仍然是一个跨领域的事情?我听说改用jsonp是可行的,但既然jsonp不支持post请求,那么即使是更新/添加到数据库中的请求,也应该使用jsonp吗?我听到的另一个建议是添加PhoneGap。这些真的是唯一的选择吗Android 带有Ajax请求的Sencha 2.0本机应用程序,android,ajax,extjs,sencha-2,Android,Ajax,Extjs,Sencha 2,我正在尝试使用Sencha(无Phonegap)编写一个本机android应用程序,它能够通过get/post请求联系服务器。我已经将代码移植到浏览器中,但是当我将应用打包到.apk中并在模拟器上运行它时(我已经更新了它的hosts文件以包含测试服务器的ip),ajax请求失败,状态代码为0 我不确定这是否仍然是一个跨领域的事情?我听说改用jsonp是可行的,但既然jsonp不支持post请求,那么即使是更新/添加到数据库中的请求,也应该使用jsonp吗?我听到的另一个建议是添加PhoneGap
Ext.Ajax.request({
url: App.config.Config.getRemoteHost() + '/users/login.json',
method: 'POST',
useDefaultXhrHeader : false,
params: {
'data[User][email]': values.email,
'data[User][password]': values.password
},
success: function(response) {
loginForm.setMasked(false);
var response = Ext.util.JSON.decode(response.responseText)
if(response.success) {
//Save session for later.
this.session = response.session;
localStorage.setItem('session', this.session);
//Display main view.
Ext.Viewport.remove(Ext.Viewport.getActiveItem(), true);
Ext.Viewport.add(Ext.create('App.view.Main'));
Ext.Msg.alert('Logged In', 'Login successful.');
} else {
Ext.Msg.alert('Login Failed', response.error);
}
},
failure: function(response) {
console.log(response.status); //This is 0 on the native app.
loginForm.setMasked(false);
Ext.Msg.alert('Error', 'There was a problem logging in.');
}
});
我发现另一个选择是不用ajax post,我可以直接提交表单作为post数据。即使在打包的应用程序中,此方法也似乎有效
loginForm.submit({
method: 'POST',
scope: this,
url: App.config.Config.getRemoteHost() + '/users/login.json',
// Upon success, go to TabPanel
success: function(form, response) {
loginForm.setMasked(false);
//Save session for later.
this.session = response.session;
localStorage.setItem('session', this.session);
//Display main view.
Ext.Viewport.remove(Ext.Viewport.getActiveItem(), true);
Ext.Viewport.add(Ext.create('App.view.Main'));
Ext.Msg.alert('Logged In', 'Login successful.');
},
// Upon failure, show an error message
failure: function(form, response) {
console.log(response);
loginForm.setMasked(false);
Ext.Msg.alert('Login Failed', response.error);
}
});