Sencha Touch 2.3.1 + Phonegap 3.4 jsonp 在 Android 中不工作,但在浏览器上工作

Posted

技术标签:

【中文标题】Sencha Touch 2.3.1 + Phonegap 3.4 jsonp 在 Android 中不工作,但在浏览器上工作【英文标题】:Sencha Touch 2.3.1 + Phonegap 3.4 jsonp not working in Android but works on browser 【发布时间】:2014-06-13 17:54:50 【问题描述】:

以下代码在浏览器中工作,我还根据这篇文章设置了服务器以使用 CORS:https://translate.google.com/translate?hl=en&sl=auto&tl=en&u=http%3A%2F%2Fwww.loiane.com%2F2014%2F01%2Frequests-ajax-com-cross-origin-resource-sharing-cors-entre-sencha-touch-e-extjs-e-backend%2F

这是我的模型:

Ext.define('App.model.Jobs', 
        extend: 'Ext.data.Model',

        config: 
            fields: ['category','type','contact','contactn','date', 'title', 'email', 'descr', 'link']
        
    );

这是我商店的代码:

Ext.define('App.store.Jobs', 
    extend: 'Ext.data.Store',
    requires: ['App.model.Jobs','Ext.data.proxy.JsonP'],
    config: 
        model: 'App.model.Jobs',
        storeId:'jobs',
        proxy: 
            type: 'ajax',
            url: 'https://app.com/app/api/api.php',useDefaultXhrHeader: false
            extraParams: get: 'records', records: 'class',
            reader: type: 'json', rootProperty:'data'
        ,
        grouper: 
            groupFn: function(rec) 
                return rec.get('category');
            , sortProperty: 'category'
        ,
        autoLoad: true
    
);

这是我的清单的代码:

Ext.define('App.view.Jobs', 
    extend: 'Ext.Container',
    xtype: 'jobs',
    requires: ['Ext.field.Search'],
    config: 
        top: 0, bottom: 0, left: 0, right: 0, layout: 'card', fullscreen: true,
        items: [
            xtype: 'list', title: 'Jobs Listing', grouped: true, indexBar: true, itemTpl: 'title',
                listeners: initialize: function() 
                        var store = Ext.getStore('jobs');
                        store.load();
                        this.setStore(store);
                    ,
            xtype: 'panel', animate: true, scrollable: direction: 'vertical', tpl: 'Job Title:<br/>title<br/>Job Type: <br/>type<br/>Position:<br/>position<br/>Description:<br/>descr<br/>Deadline:<br/>date<br/>Contact Person:<br/>contactn<br/>Contact Number:<br/>contact<br/>Email:<br/>email<br/>URL:<br/>link'

            
        ]
    
);

当我使用浏览器在浏览器中运行代码时,它运行良好。当我将其构建为本机应用程序时,它不会加载任何内容。 我列入了白名单

<access origin="*"/>

我也尝试将代码转换为 jsonP,但仍然没有在本机应用程序上加载任何内容,但在浏览器中可以正常工作

这是我的服务器代码:

header("Access-Control-Allow-Origin: $_SERVER['HTTP_ORIGIN']");
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 86400'); 

【问题讨论】:

我并不特别熟悉 android,但我知道在使用 Cordova 构建 ios 应用程序时,我有时会看到 XCode 中记录的错误很有帮助。你在这里看到什么了吗?我怀疑 CORS 可能会失败,因为当您在 Cordova 应用程序中时,引用的“域”不存在。您可以尝试将 CORS 标头设置为简单的“*” 嗨,甚至设置了 header("Access-Control-Allow-Origin: *");似乎没有解决问题 您知道请求是在应用程序之外发出并到达服务器还是只是应用程序中没有加载任何内容? 嗨,这有点难说,因为当我添加这个网址时:'ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=http://…' 它工作正常。但是当我使用我的时,它不会加载任何记录。如果我可以收听成功和失败事件会更容易,但商店似乎忽略了侦听器事件。关于如何强制商店收听事件的任何建议? 我会尝试使用 Chrome 的远程调试功能,看看您是否可以查明任何运行时错误。 【参考方案1】:

经过数小时毫无结果的研究和重新设计应用程序后,我终于找到了解决方案。事实证明,每次我将我的 url 添加为 thelink.com 时,除了我不小心删除了 s 并将其设置为 thelink.com 之外,什么都没有返回。我要感谢大家上面提供的快速回复,这让我学一两件事。感谢支持

【讨论】:

以上是关于Sencha Touch 2.3.1 + Phonegap 3.4 jsonp 在 Android 中不工作,但在浏览器上工作的主要内容,如果未能解决你的问题,请参考以下文章

Sencha Touch 2.3.1 + Phonegap 3.4 jsonp 在 Android 中不工作,但在浏览器上工作

使用 sencha touch 和 eclipse indigo

如何使用 sencha-touch.jsb3 构建 Sencha Touch?

Sencha Touch实战OA系统开发|Sencha Touch项目教程

Sencha Touch - sencha touch js 大小的性能问题

将 Sencha Architect 项目从 Sencha Touch v2.0.x 更新到 Sencha Touch 2.1.x