【问题标题】:Using invalid credentials returns xml instead of json when using Geocoder.geocode()使用 Geocoder.geocode() 时,使用无效凭据返回 xml 而不是 json
【发布时间】:2019-06-05 09:51:39
【问题描述】:

我目前正在编写一个程序,该程序应将数据库中的所有地址转换为其相应的纬度/经度坐标。 为此,我使用 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)

我试图以某种方式访问​​错误,但由于地理编码器内部已经存在错误,我必须等待超时(30 秒)才能调用我的“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 对象。

如果这按预期工作,我会很高兴收到有关如何处理此问题的建议,或者可能是测试给定令牌有效性的解决方案。

【问题讨论】:

    标签: javascript geocoding here-api


    【解决方案1】:

    这是因为实际的错误(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>
    

    【讨论】:

    • 这正是问题所在!我无法处理 xml 对象,因为在调用“onError”函数之前引发了错误。它是这样的:我打电话给geocoder.geocode(searchParameter, handleResponse, handleError) 之后我立即在控制台中收到一个错误,例如:"SyntaxError: Unexpected token '&lt;' (http://geocoder.api.here.com/6.2/geocode.json?xnlp=CL_JSMv3.0.17.0&amp;app_id=APPID&amp;app_code=APPCODE&amp;street=Leipziger%20Str.%2040&amp;postalCode=04579&amp;city=Espenhain&amp;country=DE&amp;jsoncallback=H.service.jsonp.handleResponse(0),1)"
    • handleError 函数将在请求超时 30 秒后被调用。因此,我必须等待至少 30 秒才能向客户端提供任何响应,即某些东西不起作用,即使这样我也没有得到服务器返回的 XML,因为geocoder.geocode() 无法处理它,并且正在抛出错误。我在handleError 函数中获得的唯一信息是一个带有行号和列号的对象。没有错误信息,没有错误代码,什么都没有..
    猜你喜欢
    • 2011-07-16
    • 1970-01-01
    • 2014-07-11
    • 1970-01-01
    • 2012-04-08
    • 2016-07-16
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多