【问题标题】:How to call an API within ajax call of another API如何在另一个 API 的 ajax 调用中调用一个 API
【发布时间】:2018-07-03 05:34:00
【问题描述】:

我正在尝试从天气 API 获取天气数据。此 API 需要位置的经度和纬度。因为我想使用位置名称(经纬度)作为用户输入,所以我想首先使用地理编码 API 获取这些值。

但是当我尝试在地理编码 API 的 ajax 请求中调用天气 API 时,我得到了一个跨域错误。

代码如下:

function get_gps_weather(location,maps_api_key, weather_api_key){

$.ajax({
    url : 'https://maps.googleapis.com/maps/api/geocode/json?address='+location+'&key='+api_key,
    type: 'GET',
    success : function(data){
        var latitude=data['results'][0]['geometry']['location']['lat'];
        var longitude=data['results'][0]['geometry']['location']['lng'];

        $.ajax({
            url : 'https://api.darksky.net/forecast/'+weather_api_key+'/'+latitude+','+longitude
            type: 'GET',
            success : function(weather_data){
                console.log(weather_data)
            }
        });       
    }
}); 
}

谢谢, 卢卡斯

【问题讨论】:

  • 具体错误是什么?
  • 跨域错误与嵌套的 ajax 调用无关。我认为您如何嵌套它们没有问题。尝试自己调试每个 ajax 调用,当您获取的服务器没有响应跨域标头时会出现跨域错误。

标签: javascript jquery ajax


【解决方案1】:

您的代码很有意义。您遇到的问题是CORS

Darksky API 没有将Access-Control-Allow-Origin 解析为*。这意味着您将需要设置代理服务器以在后台调用 API(您发出的请求会同时发送您的 API 密钥)。

https://darksky.net/dev/docs/faq 拥有所有相关信息。

【讨论】:

  • 谢谢,我应该阅读说明 ;) 你能告诉我如何在 localhost 上设置代理服务器进行测试吗?
  • 代理服务器就像任何其他服务器一样,唯一的区别是您的第二个请求是向该服务器发出的(然后将其发送到上述请求中提供的 URL - 以及 API 密钥)。这取决于您想要的语言,如果 JavaScript - 使用节点。 Express 是一个不错的库 - expressjs.com/en/starter/hello-world.html
猜你喜欢
  • 2020-12-08
  • 2016-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-26
  • 1970-01-01
  • 2020-08-13
  • 1970-01-01
相关资源
最近更新 更多