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 中创建复杂的数据项?