【问题标题】:Display DynamoDB items in id section of HTML page在 HTML 页面的 id 部分显示 DynamoDB 项目
【发布时间】:2021-04-03 05:57:33
【问题描述】:

使用 Lambda 函数,我扫描了我的数据库的项目。我的挑战是获取这些内容,并在单击按钮时在我的

HTML 代码

<p id="all"><b>Show all</b>
    <button onclick="getAll()"><b>Get</b></button>
</p>

getAll() 的 JavaScript 代码

</script>
    function getAll(itemStr) {
        var itemObj=JSON.parse(itemStr);

        var htm = "";
        var item;
        for (item in itemObj) {
            var data = itemObj[0];
            if (typeof data !== 'object')
                htm += '<li>'+item+' '+itemObj[item] +'</li>';
            else
                htm += '<li>' + item + ' ' + getAll(item) + '</li>';
        }
        return '<ul>'+htm+'</ul>';
    }
</script>

通过以下方式放入数据库的项目:

response=dynamodb.put_item(TableName='log', Item={'logID':{'S':str(datetime.now())},'text':{'S':text}})

数据库项目返回为

[{'logID': {'S': '2021-03-23 04:06:46.687457'}, 'text': {'S': "{'chicken':false,'veggie':true ,'牛肉':true,'猪肉':false,'外卖':false,'堂食':true,'其他':false,'Door-Dash':false}"}},{'logID ': {'S': '2021-03-23 02:11:21.440315'}, 'text': {'S': "{'chicken':false,'veggie':true,'beef':false, '猪肉':false,'外卖':false,'堂食':true,'其他':false,'Door-Dash':false}"}}]

来自 XMLHttpRequest 的 console.log 屏幕截图

【问题讨论】:

    标签: javascript html amazon-dynamodb


    【解决方案1】:

    根据您的示例数据,您可以按照下面的代码 cmets 进行操作。


    //Assumming that data is already an Array, if a string do a JSON.parse first
    const itemData = [
      {'logID': {'S': '2021-03-23 04:06:46.687457'}, 
        'text': {'S': "{'chicken':false,'veggie':true,'beef':true,'pork':false,'Take-out':false,'Dine-  in':true,'Other':false,'Door-Dash':false}"}},
      {'logID': {'S': '2021-03-23 02:11:21.440315'}, 
        'text': {'S': "{'chicken':false,'veggie':true,'beef':false,'pork':false,'Take-out':false,'Dine-in':true,'Other':false,'Door-Dash':false}"}}
    ]
    
    
    function getAll(itemStr) {
      let htm = ""
      
      
      for (let item of itemStr){
        htm += "<p>Log ID: " + item.logID.S + "</p>" + getAllItems(item.text.S)
      }
      
      //append list to paragraph tag 
      document.getElementById('section').innerHTML = "<ul>" + htm + "</ul>"
      
    }
    
    
    function getAllItems(textData){
      let formattedString = textData.replaceAll(`'`, `"`) // replace all single qoute to double qoutes
      
      //parse textData to JS Object
      let data = JSON.parse(formattedString)
      let listItems = ""
       //loop for displaying data
       for (let key in data) {
          listItems += `<li>${key}:${data[key]}</li>`
       }
       
      return listItems
    }
    
    getAll(itemData)
    <p id="section">
    </p>

    【讨论】:

    • 感谢您的 sn-p,并帮助绝对的初学者。当我运行它时,结果就是我想要完成的。但是,我可能错过了一些事情。 1. 我使用 XMLHttpRequest() 获取我的数据库项目。因此,使用您的示例,我做了一个赋值,const itemData = this.responseText 和 2。然后我将 itemData 作为 getAllItems(itemData) 传递。由于 .replaceAll() 未被识别为有效函数,因此我将其更改为 .replace(/'/g, '"')。但是,我现在得到的 textData.replace(/'/g, '"')。我哪里做错了?
    • 响应是什么样的,是字符串还是 JSON 对象,能否通过 console.log() 提供输出,然后提供屏幕截图。
    • 附上console.log响应截图。
    • 我没有意识到我应该将 itemData 作为 getAll(itemsData) 而不是 getAllItems(itemData) 传递。但是,我现在收到了开发控制台消息。 “未捕获的类型错误:无法读取未定义的属性 'S'”在 getAll 的“htm +=”

      日志 ID:“+ item.logID.S...”中。我是 javascript 中这种点符号的新手,并认为从项目如何放入数据库中是有意义的(如上面的“项目放入 db 中”部分所示)。

    • 另外,我不明白代码 sn-p 最底部的 getAll(itemData)。它应该做什么?为什么会在那个位置?
    猜你喜欢
    • 2010-12-13
    • 1970-01-01
    • 2016-03-09
    • 2019-03-10
    • 2015-02-15
    • 2014-05-16
    • 1970-01-01
    • 2011-11-28
    相关资源
    最近更新 更多