我通过观看此视频 ( 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。 任何帮助将不胜感激
最佳答案
您引用的示例是使用谷歌地图的地点搜索 API。当您构建 proxy
设置为 ajax
的手机应用程序时,您无法使用此 API。基本上,您不能使用您域之外的任何资源。就像如果您的网站位于 yourdomain.com 并且有 someotherdomain.com,那么您无法向此 someotherdomain.com 发出 ajax 请求来自 yourdomain.com,除非该域允许您这样做。在这种情况下,您的移动应用程序没有任何域。您只是在 webview 中加载一个页面。
原因是ajax将无法加载跨域资源。应用程序构建适用于浏览器,因为我相信您使用带有 --disable-web-security
标志的 chrome。要使用 CORS,您需要使用 JsonP 代理。如果您要打包移动应用程序,这是唯一的方法。如果在某种情况下,您拥有服务器(但不在本上下文中),那么您可以通过设置适当的 header (例如
Access-Control-Allow-Origin: *
或
Access-Control-Allow-Origin: http://yourdomain.com/resource
尝试将代理设置为 JsonP 。
关于android - Sencha Touch 2.1 native (android)应用程序无法从远程获取 json(它适用于 PC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14777948/