javascript - 访问 $.ajax 语句内分配的 JSON 时出现问题

标签 javascript jquery json

我正在尝试使用 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 ,但我总是收到此错误。我哪里出错了?

最佳答案

Ajax 是异步的。

ajax 方法下面的行在填充数据之前执行。在成功处理程序内调用该函数

因此,当您尝试访问预测对象时,它仍然是未定义的。

success: function(data) {
    forecast = data;
    console.log(forecast.daily.summary);

    getDailySummary(forcast);
  },

切勿使用 document.write 写入 HTML。尝试将数据附加到页面上的某个元素。

关于javascript - 访问 $.ajax 语句内分配的 JSON 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18069653/

相关文章:

java - 用Gson解析Json,没有[]的数组?

javascript - 在reactjs CK编辑器5的工具栏中添加一个新按钮

jquery - 如何创建从 CSS 下拉菜单到幻灯片 2 上的 iframe 的链接

php - 如何通过 Eloquent ORM 选择 json 之类的键和值数组?

javascript - 是否可以显示数据库中的博客数据(pdf)和其他结果(字符串)

javascript - 平滑扩展 Div 不滞后

json - Microsoft Graph 上的 AAD 应用程序注册

javascript - HTML5/JS 音频 : Real-time audio mixing possible?

javascript - 使用 jquery 对具有单个最大值的多个文本框值中的字符进行计数

javascript - angularjs:动态键:值对作为函数的参数