【问题标题】:GET json API from twitch. getting Uncaught TypeError when im not online. JSON changes从抽搐获取 json API。当我不在线时得到 Uncaught TypeError。 JSON 更改
【发布时间】:2019-08-27 13:55:58
【问题描述】:

当我在 twitch 上在线流式传输时,我试图从 JSON 中获取一个值。问题是当我不在线时,我收到一个错误Uncaught TypeError,因为当我在线/离线时 JSON 会发生变化。返回值发生变化时如何处理?

$.ajax({
        headers: {
            'Client-ID' : 'xxx'
        },
        url: api_url + "?user_id=" + target,
        contentType: "application/json",
        dataType: 'json',
        success: function(result){
            console.log(result);
            document.getElementById("second").innerHTML = result.data[0].id;

        }

当我在线时,这非常有效。但是当我离线时 result.data[0].id 不存在并给我:

未捕获的类型错误:无法读取未定义的属性“id”。

我希望我能理解自己,我已经在网上和 StackOverflow 上搜索了很多年的答案。

【问题讨论】:

  • 为什么不在分配支票if(result.data && result.data.length)之前添加支票??
  • “成功”之前还是之后?我尝试使用 if(result.data[0].id == 0) 但这给了我一个错误
  • 应该在成功内if(result.data && result.data.length) document.getElementById("second").innerHTML = result.data[0].id
  • 谢谢杰迪普。简单有效。工作完美。感谢您帮助像我这样的初学者。

标签: javascript arrays json ajax


【解决方案1】:

在您尝试对数据执行任何操作之前,我会添加检查,我还会检查错误,它可能不会返回错误,但一种可能的解决方案可能如下所示:

$.ajax({
    headers: {
        'Client-ID' : 'xxx'
    },
    url: api_url + "?user_id=" + target,
    contentType: "application/json",
    dataType: 'json',
    success: function(result, err){
        if (!err && result && result.data && result.length) {
            document.getElementById("second").innerHTML = result.data[0].id;
        }
    });

因为 if 语句会从左到右解析,它会首先检查错误,然后如果结果为真(IE,不等于未定义),那么假设您可以检查 result.data 是足够安全的也真实,最后检查长度是否真实,这意味着您至少有一个元素,并且可以安全地访问它。

你可以在这里https://developer.mozilla.org/en-US/docs/Glossary/Truthy找到更多关于“真相”的信息

【讨论】:

  • 随意忽略 err 部分,它可能不是 API 的工作方式
  • if && 完美运行。感谢您帮助像我这样的初学者!
猜你喜欢
  • 1970-01-01
  • 2015-10-03
  • 1970-01-01
  • 1970-01-01
  • 2012-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多