【问题标题】:JSON data is undefined but appears in console logJSON 数据未定义,但出现在控制台日志中
【发布时间】:2015-03-31 21:10:16
【问题描述】:

我正在访问以下 JSON 数据:

http://veratech.co.nz/blog/?json=1

当我尝试访问位于下面代码第 4 行的数组中的“url”属性时,我收到一个未定义的错误。即使它会出现在 console.log(第 13 行)中,带有 console.log(val.attachments[0].url);。

代码如下:

        $.each(data.posts, function(index, val){
        output += '<li>';
        output += '<a href="#blogpost" onclick = showPost(' + val.id + ')">';
        output += '<img src="' + val.attachments[0].url + '" alt="">';
        output += '<h3>' + val.title + '</h3>';
        //Here we shorten the paragraph to 60 characters. 
        var str = val.excerpt;
        var paraInfo = str.slice(0, 60);
        output += '<p>' + paraInfo + '</p>';
        //Closing off the the closing html tags
        output += '</a>';
        output += '</li>';
        console.log(val.attachments[0].url);
    });//Go through each post

非常感谢您的建议

【问题讨论】:

  • JSON 似乎无效
  • 您确定它与您在控制台中看到的值相同,而不是上一次迭代中的值吗?如果出现错误,它将停止脚本执行,并且不会再到达 console.log 行。
  • 它可以在控制台中正常工作并列出所有 url 数据。正如第 4 行的
  • 呃,哪一行准确地显示了错误,具体说了什么?
  • TypeError: val.attachments[0] 未定义

标签: javascript jquery json each


【解决方案1】:

我认为还有其他问题。

我手动下载了json,并写了这段代码:

HTML:

Urls:
<ul id="foo">
</ul>

JavaScript:

function extractUrls(data) {
    var $foo = $('#foo');

    $.each(data.posts, function (i, p) {
        $foo.append($('<li></li>').text(p.attachments[0].url));
    });
}

var jsonData = { /* code omitted for brevity */ };

extractUrls(jsonData);

我的输出是:

Urls:
<ul id="foo">
    <li>http://veratech.co.nz/blog/wp-content/uploads/2014/03/martial.jpg</li>
    <li>http://veratech.co.nz/blog/wp-content/uploads/2013/12/grave.jpg</li>   
    <li>http://veratech.co.nz/blog/wp-content/uploads/2013/12/GTA5.jpg</li>
    <li>http://veratech.co.nz/blog/wp-content/uploads/2013/10/miyagi.jpg</li>
    <li>http://veratech.co.nz/blog/wp-content/uploads/2013/08/htc-box.png</li>
    <li>http://veratech.co.nz/blog/wp-content/uploads/2013/08/scaffold1.jpg</li>
    <li>http://veratech.co.nz/blog/wp-content/uploads/2013/07/barriera.png</li>
    <li>http://veratech.co.nz/blog/wp-content/uploads/2013/06/tv.jpg</li>
</ul>

注意:您应该能够将 var jsonData = 行替换为:

$.get('http://veratech.co.nz/blog/', { json: 1 }, extractUrls, 'json');

无论如何;看不出你的代码有什么问题?您确定这是问题所在?

PS:我什至在$.each 循环中添加了以下内容:

    if (!p.attachments[0].url) {
        alert(p.id + ' has undefined url!');
    }

并且没有看到任何警报...

See code running in a jsFiddle here

【讨论】:

  • 感谢您的反馈。我将沿着这些路线进行测试。你在地球上的反应比其他反应更多。干杯
  • 您可能还希望检查 p.attachments 数组中是否有任何值,以及附件是否有 url。 if (p.attachments &amp;&amp; p.attachments.length &gt; 0 &amp;&amp; p.attachments[0].url) { ... }
  • @lowfi2dev 实际上;刚刚修改了jsFiddle I posted with this update;请注意,您的某些文章没有带有网址的附件。
猜你喜欢
  • 2018-07-16
  • 2019-08-29
  • 1970-01-01
  • 1970-01-01
  • 2016-06-04
  • 1970-01-01
  • 2021-03-02
  • 1970-01-01
  • 2022-01-04
相关资源
最近更新 更多