我正在通过Cordova SDK的示例todolist应用程序工作。
网址在这里 https://msdn.microsoft.com/en-us/library/dn832630.aspx
我在BING Maps网站上设置了一个密钥。我可以通过标准网络浏览器访问位置服务,发送纬度和经度,用我的密钥粘贴到URL中。
然而角度调用总是失败。更糟糕的是错误始终是空白的。没有状态代码没有错误消息。认为它必须是CORS。
我已经浏览了示例并下载了代码示例,但两者都有相同的问题。
答案 0 :(得分:0)
对于任何通过样本的人。我今天意识到Angular是邪恶的。他们说这是一个很好的可测试的javascript与依赖注入,但它似乎没有太多的兴趣告诉你当你有一个错误是什么,它只是失败。伟大而高尚的编程思想,但没有错误信息,它并不是很好。
无论如何修复是Angular对json代码非常严格,所以Bings Maps Service方法的services.js中的行getAddressFromPosition
它曾经与.get()一起使用,但这可能是编写演示时Angular的旧版本。我尝试使用1.2,但Ripple模拟器不喜欢对浏览器特定代码的引用。所以我使用了最新的1.3.13。我相信。
这是访问Bing位置服务的地方,Cordova地理位置坐标返回Json,但Angular希望它们包装在JSONP中。在搜索越来越分散的网页时,似乎错误可能是CORS否,因此许多不同的人在控制器,模块,服务中使用JSONP调用,有些使用$ http其他$资源。最后使用了点点滴滴,我得到JSONP来处理$ resources并将其插入$ promise,来自控制器的调用需要。我使用了一个静态的Url和我知道有效的坐标,所以你必须使用:param angular notation将它们放回去。希望它有助于某人。
所以改为:
getAddressFromPosition: function (position) {
var resource = $resource(url, {}, {
jsonp_query: {
method: 'JSONP'
}
});
return resource.jsonp_query().$promise.then(function (response) {
return response.resourceSets[0].resources[0].address.formattedAddress;
}, function (error) {
return position.coords.latitude + "," + position.coords.longitude
});
编辑:
我把上面的内容放进去了。然而问题出于某种原因,也许是通过调试,应用程序的另一个实例部署在另一个端口上。然后更改应用程序以在此新端口上运行。初始端口是4400.问题是,角度中的$ http或$ resource调用必须通过此模拟器,并且模拟器将其视为跨域,除非将其配置为运行应用程序的同一端口。
所以网址: http://localhost:4409/index.html?enableripple=cordova-3.0.0-iPhone5
然后在右侧的Settings Div下拉列表中,代理端口也必须设置为4409,否则浏览器会在模拟器实际执行它以查询Azure移动服务之前抱怨$ http请求是跨域的或Bing地图。
所以这非常令人沮丧。然而,VS Cordova绝对减少了你必须配置用于制作混合移动应用程序的比特数量,仍然有一些像这样的小故障可能会让你失望。我认为它是有角度的东西,因为没有错误消息,但在Dev Tools控制台中的Chrome中出现了错误,并且经过一些谷歌搜索后很明显,它是在不同的端口上运行的涟漪仿真器由于Access-Control-Allow未被设置,代理不允许转发呼叫。