使用Geocoder.geocode()时,使用无效的凭据返回xml而不是json

时间:2019-06-05 09:51:39

标签: javascript geocoding here-api

我当前正在编写一个程序,该程序应该将数据库中的所有地址都转换为其对应的经/纬度坐标。 为此,我使用了HERE地理编码API。 由于该程序适用于多个人,因此我让他们手动输入他们的app_id和app_code。 问题是,如果凭据之一无效,它将返回XML而不是JSON,这将导致错误: (SyntaxError: expected expression, got '<')

这是一个示例链接,由地址解析器调用:

http://geocoder.api.here.com/6.2/geocode.json?xnlp=CL_JSMv3.0.17.0&app_id=invalidCredentialID&app_code=InvalidCredentialCode&street=Haupstr.%2042&postalCode=99880&city=Leina&country=DE&jsoncallback=H.service.jsonp.handleResponse(0)

我试图以某种方式访问​​该错误,但是由于Geocoder内部已经存在错误,因此我必须等待超时(30s)后才能调用“ onError”回调。即使那样,我也不会得到像“ invalidCredentials”这样的错误代码,而只有行号和列号的对象。

基本上我只是在使用普通的地理编码服务

var platform = new H.service.Platform({
  app_id: 'invalidCredentialId',
  app_code: 'invalidCredentialCode'
});
var geocoder = platform.getGeocodingService();

geocoder.geocode({searchText: 'Berlin'}, handleResponse, handleError);

我认为这不符合预期。 Geocoder.geocode()函数期望将JSON值传递给回调函数,但由于无法将XML数据解析为JSON对象而失败。

如果这能按预期工作,那么我将很高兴为您提供有关如何解决此问题的建议,或者是一种用于测试给定令牌有效性的解决方案。

1 个答案:

答案 0 :(得分:0)

这是因为实际错误(PermissionError)被包装为xml对象。在onError函数中,您必须处理xml对象。

下面是示例错误对象:

<ns2:Error xmlns:ns2="http://www.navteq.com/lbsp/Errors/1" type="PermissionError" subtype="InvalidCredentials"><Details>invalid credentials for invalidCredentialId</Details></ns2:Error>