【问题标题】:For Loop with JSON data returns unexpected Identifier带有 JSON 数据的 For 循环返回意外的标识符
【发布时间】:2020-08-03 08:11:27
【问题描述】:

我有以下 javascript

            for (var i = 0; i < e.blog.length; i++) {

var id = e.blog[i].id;
var date = e.blog[i].date;
var title = e.blog[i].title;
var image = e.blog[i].image;
var excerpt = e.blog[i].excerpt;
var tags = e.blog[i].tags;
var html =
  'img src="' +
  image +
  '" alt="' +
  title +
  'image"<h1>' +
  title +
  "</h1>" +
  '<div class="post-details">' +
  '<span class="post-date">' +
  published +
  '<h2 class="post-title">' +
  title +
  "</h2>" +
  '<p class="post-excerpt">' +
  excerpt +
  "</p>" +
  '<div class="post-categories">' +
  '<span class="post-tag">' +
  tags +
  "</span>" +
  "</div> </div>";

      html = document.getElementById("data").innerHTML = html;
    }
  });

    
            document.getElementById('data').innerHTML = html

从此 JSON 响应中获取内容

{
  ... (rest of json file before these dots important bit below)
  },
  "blog": {
    "post-1": {
      "id": "1",
      "date": "2020.08.01",
      "title": "Post Title",
      "excerpt": "Post excerpt goes here",
      "tags": "Post Tag 1, Post Tag 2",
      "body": "Blog body content goes in this field"
    },
    "post-2": {
      "id": "1",
      "date": "2020.08.01",
      "title": "Post Title",
      "excerpt": "Post excerpt goes here",
      "tags": "Post Tag 1, Post Tag 2",
      "body": "Blog body content goes in this field"
    }
  }
}

它应该在 div 中显示来自 javascript 的 HTML,id 为data,如下所示

    <div id='data'>
    </div>

但是它返回以下错误 Unexpected identifier 'I'

我将如何解决这个问题?由于我在 for 循环的开头被指定,它不应该工作吗?

从博客中创建了一个数组,但它所做的只是返回以下错误。错误下面的代码

Unhandled Promise Rejection: TypeError: undefined is not an object (evaluating 'e.blog[i].id')

JS

    const arrBlog = Object.values(e.blog);
    console.log(arrBlog);
    for (var i = 0; i < arrBlog.length; i++) {
      var id = arrBlog[i].id;
      var date = arrBlog[i].date;
      var title = arrBlog[i].title;
      var image = arrBlog[i].image;
      var excerpt = arrBlog[i].excerpt;
      var tags = arrBlog[i].tags;
      var html = `
                  <div class="post">
            <img src="${image}" alt="${title} Image" />
            <div class="post-details">
                    <span class="post-date">${date}</span>
                    <h2 class="post-title">${title}</h2>
                    <p class="post-excerpt">${excerpt}</p>
                    <div class="post-categories">
                        <span class="post-tag">${tags}</span>
                    </div>
            </div>
        </div>
            `;
      html = document.getElementById("data").innerHTML = html;

【问题讨论】:

    标签: javascript html json api fetch


    【解决方案1】:
    1. html i += 应该是html +=

    2. e.blog 不是数组,因此 e.blog.length 未定义。您可以改用这样的循环: for (var i in e.blog)

    3. 我已经更正了您的更新代码:

    const arrBlog = Object.values(e.blog)
    for (var i = 0; i < arrBlog.length; i++) {
        var published = "";
        var document = "";
        var id = arrBlog[i].id;
        var date = arrBlog[i].date;
        var title = arrBlog[i].title;
        var image = arrBlog[i].image;
        var excerpt = arrBlog[i].excerpt;
        var tags = arrBlog[i].tags;
        var html =
            'img src="' +
            image +
            '" alt="' +
            title +
            'image"<h1>' +
            title +
            "</h1>" +
            '<div class="post-details">' +
            '<span class="post-date">' +
            published +
            '<h2 class="post-title">' +
            title +
            "</h2>" +
            '<p class="post-excerpt">' +
            excerpt +
            "</p>" +
            '<div class="post-categories">' +
            '<span class="post-tag">' +
            tags +
            "</span>" +
            "</div> </div>";
        document.getElementById("data").innerHTML += html;
    }
    

    【讨论】:

    • 使用数组常量编辑了原始帖子。我现在收到一个错误Unhandled Promise Rejection: TypeError: undefined is not an object (evaluating 'e.blog[i].id')
    • 这适用于一篇文章,但循环不会重复并显示第二篇文章?代码更新
    • 我再次更新了答案。将.innerHTML = html 更改为.innerHTML += html
    【解决方案2】:

    在第 2 行,您正在执行 html i += [...],这不是有效的 JavaScript。我想你的意思是 html += [...] 没有 i 那里

    【讨论】:

    • 这修复了错误但是帖子仍然没有显示在 div 中
    • 其他人说blog 不是数组。你能看看他们的答案,看看有没有帮助?
    【解决方案3】:

    response.blog 不是数组。尝试获取Object.keys(response.blog),然后对其进行迭代。

    检查这个例子:

    const keys = Object.keys(response.blog);
    
    keys.map(key => `<div attr="${response.blog[key].something}">...</div>`)
    

    【讨论】:

    • 这与 for 循环有什么不同吗?或者我只是在一个数组而不是一个对象上运行一个 for 循环,我之前用一个对象做过这个并且让它工作
    • 您也可以在 for 循环中使用 Object.keys 的结果。 map 是一种更紧凑的遍历数组数据的方式。
    【解决方案4】:

    您的博客是一个对象而不是数组。

    const arrBlog = Object.values(response.blog)
    for(var i=0 ; i<arrblog.length ;i++ ){...
    

    【讨论】:

    • 我把博客变成了一个数组,现在收到如下错误Unhandled Promise Rejection: TypeError: undefined is not an object (evaluating 'e.blog[i].id')
    • 不要使用e.blog[i].id,我们已经创建了单独的数组arrBlog。你可以用arrBlog[i].id试试吗?
    • 使用arrBlog[I].id更新我现在收到此错误Unhandled Promise Rejection: ReferenceError: Cannot access uninitialized variable.
    • 你能发一下你是如何初始化arrBlog的吗?
    猜你喜欢
    • 2017-02-25
    • 2020-12-27
    • 1970-01-01
    • 2016-01-23
    • 2013-12-20
    • 2020-02-09
    • 1970-01-01
    • 2013-10-14
    • 1970-01-01
    相关资源
    最近更新 更多