2

私はforecast.io APIを使って遊んでいて、(最終的には)自分の地域の天気について毎日メールで送ってくれるものを作っています。API にリクエストを送信すると、すべての情報を含む JSON オブジェクトが返されます。私はJavaScriptとPHPを使用してこれを書いています。これが私がこれまでに持っているコードです(今は少し面倒です):

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<script type="text/javascript">

var latitude = "42";
var longitude = "-71";
var coordinates = latitude + "," + longitude;

var forecast;

$.ajax({
  url: "<?php echo $_SESSION['url'] ?>42,-71",
  type: "GET",
  dataType: "jsonp",
  crossDomain: true,
  jasonpCallback: 'blah',
  success: function(data) {
    forecast = data;
    console.log(forecast.daily.summary);
  },
  error: function() {
    console.log("This failed.");
  }
});

//**********************************

document.write(getDailySummary());


//**********************************
function getDailySummary() {
  var summary = forecast.daily.summary;
  return "<p>" + summary + "</p>";
}

</script>

現在、$.ajax() ステートメントは正常に実行され、予測の概要がコンソールに記録されています。ただし、getDailySummary()あまりうまくいきません。これを実行すると、次のエラーが表示されます。

Uncaught TypeError: Cannot read property 'daily' of undefined           index.php:42
  getDailySummary                                                       index.php:42
  (anonymous function)                                                  index.php:37
Rain on Thursday and Friday; temperatures rising to 85° on Saturday.    index.php:28

これにより、forecast未定義のように聞こえます。私の最初の考えは、スコープに関係しているということですが、予測を として定義するなど、あらゆる種類のものをいじってみましたが、window.forecast常にこのエラーが発生します。どこが間違っていますか?

4

2 に答える 2

0

この線:

document.write(getDailySummary());

ajax呼び出しが正常に完了する前に呼び出されるため、forecastまだ割り当てられていないため、エラーが発生します。Ajax は非同期です

于 2013-08-05T23:55:24.720 に答える