2

我通过观看此视频 ( 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'
            }
        }
    }
})

after-build(在运行“sencha app build native”之后)包在我的 MAC(所有浏览器)上运行良好,但生成的应用程序(我在我的 nexus 手机上运行它)工作但不从谷歌收集任何数据映射 json。任何帮助,将不胜感激

4

1 回答 1

3

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

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

Access-Control-Allow-Origin: *

或者

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

尝试将代理设置为 JsonP 。

于 2013-02-08T18:30:33.983 回答