Sencha Touch 2.1 本机(android)应用程序没有从远程获取 json(它适用于 PC)

Posted

技术标签:

【中文标题】Sencha Touch 2.1 本机(android)应用程序没有从远程获取 json(它适用于 PC)【英文标题】:Sencha Touch 2.1 native (android) app not getting json from remote (it works on PC) 【发布时间】:2013-02-08 17:20:49 【问题描述】:

我通过观看此视频 (http://youtu.be/5F7Gx0-W-M4) 创建了我的第一个 Sencha touch 2 应用,它的商店页面结构如下:

Ext.define('FirstApp.store.Places',
    extend:'Ext.data.Store',

    config:

        autoLoad:true,
        model:'FirstApp.model.Place',
        proxy:
            type:'ajax',
            url:'https://maps.googleapis.com/maps/api/place/search/json?location=-33.8670522,151.1957362&radius=500&types=food&name=harbour&sensor=false&key=AIzaSyCFWZSKDslql5GZR0OJlVcgoQJP1UKgZ5U',
            reader:
                type:'json',
                rootProperty:'results'
            
        
    
)

构建后(在运行“sencha app build native”之后)包在我的 MAC(所有浏览器)上运行良好,但生成的应用程序(我在我的 nexus 手机上运行)运行良好,但不收集任何数据来自谷歌地图 json。 任何帮助将不胜感激

【问题讨论】:

【参考方案1】:

您所指的示例是使用谷歌地图的地点搜索 API。在将proxy 设置为ajax 的手机应用程序时,您不能使用此API。基本上,您不能使用域外的任何资源。就像如果您的网站位于 yourdomain.com 并且有 someotherdomain.com,那么您无法向该 someotherdomain.com 发出 ajax 请求来自 yourdomain.com,除非该域允许您这样做。在这种情况下,您的移动应用程序没有任何域。您只是在 webview 中加载一个页面。

原因是,ajax 将无法加载跨域资源。应用程序构建适用于浏览器,因为我相信您使用带有 --disable-web-security 标志的 chrome。要使用 CORS,您需要使用 JsonP 代理。如果您要为移动应用程序打包,这是唯一的方法。如果在某种情况下,您拥有服务器(但不在此上下文中),那么您可以通过设置适当的标头来允许 CORS,例如

Access-Control-Allow-Origin: *

Access-Control-Allow-Origin: http://yourdomain.com/resource

尝试将代理设置为 JsonP。

【讨论】:

非常感谢您提供如此清晰的解释。我会为您的回答投上好票,但我没有所需的声誉。

以上是关于Sencha Touch 2.1 本机(android)应用程序没有从远程获取 json(它适用于 PC)的主要内容,如果未能解决你的问题,请参考以下文章

Phonegap 2014 - 如何从 Javascript ( Sencha Touch ) 调用 java 本机代码

无法使用 Sencha Cmd 3.1.1.274 构建 Sencha Touch 2.1 应用程序

如何在 Sencha touch 2.1 中创建复杂的数据项?

app.json Sencha Touch 2.1 中的 buildPaths 似乎已被删除

Sencha Touch 2.1 自动进入下一个字段

phonegap vs sencha touch 需要澄清