0

我正在使用天蓝色地图服务的 GET url 从纬度和经度获取时区。 https://docs.microsoft.com/en-us/rest/api/maps/timezone/gettimezonebycoordinates

当我与邮递员一起尝试时,我得到了正确的时区,但是当我从我的代码中做同样的事情时,我没有得到正确的响应。

let url =
      "https://atlas.microsoft.com/timezone/byCoordinates/json?subscription-key=" +
      subsciptionKey +
      "&api-version=1.0&query=" +
      latitude +
      "," +
      longitude;
    var settings = {
      async: true,
      url: url,
      method: "GET",
      header: {
        // "x-ms-client-id": "3f13b1ef-547e-4594-b5db-7a70a68d3799",
        "Accept-Language": "EN"
      }
    };

    $.ajax(settings).done(function(response) {
      console.log(response);

下面是我从邮递员那里得到的结果,

{
    "Version": "2019a",
    "ReferenceUtcTimestamp": "2019-04-02T13:51:58.6714007Z",
    "TimeZones": [
        {
            "Id": "Asia/Kolkata",
            "Names": {
                "ISO6391LanguageCode": "EN",
                "Generic": "India Standard Time",
                "Standard": "India Standard Time",
                "Daylight": "India Standard Time"
            },
            "ReferenceTime": {
                "Tag": "IST",
                "StandardOffset": "05:30:00",
                "DaylightSavings": "00:00:00",
                "WallTime": "2019-04-02T19:21:58.6714007+05:30",
                "PosixTzValidYear": 2019,
                "PosixTz": "IST-5:30"
            }
        }
    ]
}

但在我的代码中,“通用”字段为空。它说“没有提供支持的语言代码”。

ID:“亚洲/加尔各答”名称:日光:“”通用:“”ISO6391LanguageCode:“未提供支持的语言代码”标准:“”

4

1 回答 1

0

如错误消息所述,这是由于服务无法确定时区的语言/本地化支持而导致的。

在您的场景中,问题似乎是您试图通过 jQuery 的ajax函数向 AJAX 请求添加标头,但请注意,它们指定标头的属性是headers,而不是header您使用的。因此,您的设置需要更改为:

var settings = {
  async: true,
  url: url,
  method: "GET",
  headers: {
    "Accept-Language": "EN"
  }
};

我实际上也遇到了No supported language code supplied错误,但出于不同的原因。如果我使用 Postman 访问如下 URL:

https://atlas.microsoft.com/timezone/byCoordinates/json?api-version=1.0&subscription-key=[your-key-here]&query=36.6209994,-92.1343022

并将Accept-Language标头设置为他们不支持的位置代码,它将返回ISO6391LanguageCode: "No supported language code supplied"错误。

我将标头设置为Azure Maps页面中Accept-Language的本地化支持中列出的位置代码,就像我的情况一样,奇怪的是,我会收到该错误消息。en-US

如果我将位置代码更改为只是en,它可以工作。

您可以通过以下任一方式取回有效的时区名称:

  1. 完全省略标题(这将默认语言返回为英语或“en”)。
  2. 仅使用语言代码的第一部分(即使用en代替en-US)。
于 2020-02-10T23:44:12.503 回答