2015-02-11 45 views
0

我正在通过Cordova SDK的示例todolist应用程序工作。TodoList示例Bing地图服务返回状态为空的错误

的网址是这里 https://msdn.microsoft.com/en-us/library/dn832630.aspx

我成立了Bing地图网站上的一个键。我可以通过标准的Web浏览器访问发送经纬度的位置服务,并使用我的密钥粘贴到URL中。

然而,角度调用总是失败。更糟糕的是,错误总是空白。没有状态码没有错误信息。以为它一定是CORS。

我已经通过示例运行并下载了代码示例,两者都有相同的问题。

回答

0

对于任何人通过示例。我今天意识到Angular是邪恶的。他们说这是很好的可测试的JavaScript与依赖注入,但它似乎并没有太多兴趣告诉你什么是错误是当你有一个,它只是失败。伟大而高贵的编程思想,但没有错误信息,它不是很好。

总之修复是角是非常严格的JSON代码,以便在services.js线为Bings地图服务方法getAddressFromPosition

它使用获得()的工作,但是这可能是一个旧版本演示写入时的Angular。我试过使用1.2,但Ripple模拟器不喜欢引用特定于浏览器的代码。所以我用了最新的1.3.13我相信。

这是访问Bing位置服务的位置,Cordova地理位置坐标返回Json,但Angular希望它们包装在JSONP中。搜索越来越分散的网络它出现错误可能是CORS否,所以许多不同的人在控制器,模块,服务中使用JSONP调用,有些使用$ http others资源。最后,我使用JSONP来处理$资源,并将其插入到$ promise中来自控制器的调用需求中。我使用了一个静态的Url和坐标我知道工作,所以你将不得不使用:param角度符号把它们放回去。希望它可以帮助某人。

所以更改为:

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

然后,代理端口也必须设置为4409,否则浏览器会抱怨$ HTTP请求跨域,前模拟器实际上执行它来查询Azure移动服务或Bing地图。

所以这非常令人沮丧。然而,VS Cordova已经明确减少了您为配置混合移动应用程序而必须配置的位数,但仍然存在一些小故障,可能会让您感觉不适。我认为它是有角度的东西,因为没有错误消息,但在开发工具控制台中的Chrome中是错误的地方,并且经过一些谷歌搜索后,显然它是运行在不同端口上的纹波模拟器由于Access-Control-Allow没有被设置,代理不允许该呼叫被转发。