0

我正在尝试使用 Sencha(无 Phonegap)编写一个本机 android 应用程序,该应用程序能够通过 get/post 请求联系服务器。我已经得到了可以在浏览器中运行的代码,但是当我将应用程序打包成 .apk 并在模拟器上运行时(我已经更新了它的 hosts 文件以包含我的测试服务器的 ip),ajax请求失败,状态码为 0。

我不确定这是否仍然是跨域的事情?我听说使用 jsonp 代替会起作用,但是由于 jsonp 不支持发布请求,因此即使对于将要更新/添加到数据库的请求,使用 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.');
        }
    });
4

1 回答 1

0

我发现另一种选择不是使用 ajax 帖子,我可以直接提交表单作为帖子数据。即使在打包的应用程序中,此方法似乎也有效。

 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);
        }
    });
于 2014-04-22T23:14:45.743 回答