使用jQuery从API显示天气

时间:2018-03-10 14:55:18

标签: javascript jquery ajax

我正在尝试使用weatherunderground api来显示天气信息。

运行我的代码时,我收到以下消息。

  

TypeError:undefined不是对象(评估   ' parsed_json ['位置'] ['城市']&#39)

我不确定为什么会这样或如何解决这个问题。我是JavaScript和jQuery的新手。

这是我的代码



$(document).ready(function() {
  $.ajax({
  url : "http://api.wunderground.com/api/dddb7758c5d626fc/geolookup/conditions/q/IA/Cedar_Rapids.json",
  dataType : "jsonp",
  success : function(parsed_json) {
  var location = parsed_json['location']['city'];
  var temp_f = parsed_json['current_observation']['temp_f'];
  alert("Current temperature in " + location + " is: " + temp_f);
  }
  });
});




更新我的api后它可以工作,但我仍然在控制台中收到相同的消息

2 个答案:

答案 0 :(得分:1)

您的成功功能意味着您已经到达了api,但此API可以返回错误!

看看我去网址时得到了什么:

{
  "response": {
  "version":"0.1",
  "termsofService":"http://www.wunderground.com/weather/api/d/terms.html",
  "features": {
  }
        ,
    "error": {
        "type": "invalidkey"
        ,"description": "this key is not valid due to exceeding rate plan"
    }
    }
}

因此,请检查您的API密钥,并在执行任何操作之前检查是否存在错误。同样,总是检查所有内容,所以如果没有错误就发生事件,在尝试用它做其他事情之前检查值是否存在!

答案 1 :(得分:0)

始终检查错误:

所以不要像你一样立即使用数据,试试

success : function(parsed_json) {
  if(parsed_json.response.error) {
    // found error
    alert('ERROR: ' + JSON.stringify(parsed_json.response.error);
    return;
  }

  // all good!
  var location = parsed_json['location']['city'];
  var temp_f = parsed_json['current_observation']['temp_f'];
  alert("Current temperature in " + location + " is: " + temp_f);
}

这是一个实例:

$(function() {
  getWeather();
});

function getWeather() {
  var serviceUrl = "https://api.wunderground.com/api/dddb7758c5d626fc/geolookup/conditions/q/IA/Cedar_Rapids.json";
  
  $.ajax({
    // The url
    url: serviceUrl,
 
    // The name of the callback parameter, as specified by the YQL service
    jsonp: "callback",
 
    // Tell jQuery we're expecting JSONP
    dataType: "jsonp",
 
    // Work with the response
    success: function( response ) {      
      console.log( response ); // server response
      
      var msg = "";
      if(response.response.error) {
        msg = "ERROR FOUND\n" + JSON.stringify(response.response.error);
      }
      else {
         msg = JSON.stringify(response.response);
      }
      
      $("pre").text(msg);
    }
  });  
}
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>Example</title>
  <script src="https://code.jquery.com/jquery-git.js"></script>
</head>
<body>
  
  <pre></pre>
  
</body>
</html>