繁体   English   中英

未捕获的TypeError:无法读取json_encode()上未定义的属性“ length”

[英]Uncaught TypeError: Cannot read property 'length' of undefined on json_encode()

因此,我现在尝试了2个小时,但仍然无法弄清我的代码有什么问题。 我创建了一个简单的XMLHttpRequest,它从PHP页面获取信息,该信息来自数据库。 这是我所做的:

var xhr2 = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
xhr2.open('GET', 'admin/images_data.php');
xhr2.onreadystatechange = function (e) {
    var album_photos = eval(xhr2.responseText);
    console.log(album_photos);
    for (var i = 0; i < album_photos.length; i++) {
        var td = document.createElement('td');
        var imagewrap = document.createElement('div');
        imagewrap.className = "image-wrap";
        var imagemenu = document.createElement('div');
        imagemenu.className = "image-menu";
        var imagemenuimg1 = document.createElement('img');
        imagemenuimg1.src = "img/edit_img.png";
        var imagemenuimg2 = document.createElement('img');
        imagemenuimg2.src = "img/close.png";
        var imagewrapimg = document.createElement('img');
        imagewrapimg.className = "thumbnail";
        imagewrapimg.src = "admin/album_photos/" + album_photos[i].Image_Path;
        document.getElementById("tiare").appendChild(td);
        td.appendChild(imagewrap);
        imagewrap.appendChild(imagemenu);
        imagemenu.appendChild(imagemenuimg1);
        imagemenu.appendChild(imagemenuimg2);
        imagewrap.appendChild(imagewrapimg);
    }
}
xhr2.send(null);

我在控制台中得到的是:

Uncaught TypeError: Cannot read property 'length' of undefined
xhr2.onreadystatechange
[Object, Object]
[Object, Object]

这是我的HTML,上面附加了元素:

<html>

    <head>
        <link rel="stylesheet" href="css/style.css">
    </head>

    <body>
        <!-- <div class="big_image" id="drop_zone">
            <img src="" id="big_img" />
        </div -->
        <div class="images_holder">
            <div class="header">Album Name - Photo Album    <span class="close"><img src="img/close.png" /></span>

            </div>
            <div class="body">
                <table width="80%">
                    <tr id="tiare">
                        <td>
                            <div class="image-wrap">
                                <div class="image-menu">
                                    <img src="img/edit_img.png" />
                                    <img src="img/close.png" />
                                </div>
                                <img src="img/anger.jpg" class="thumbnail" />
                            </div>
                        </td>
                    </tr>
                </table>
            </div>
        </div>
        <div id="drop_zone">Drag/Drop images to upload.</div>
        <div style="height: 30px; width: 80%; color: white; text-align: center; margin: 0 auto;">
            <p id="progress_bar" style="width: 0%; background-color: red;"></p>
        </div>
        <script src="js/script.js"></script>
    </body>

</html>

发生的另一个问题是它们是2个对象,其中还包含2个对象,因此应该只显示1个对象,其中还包含2个对象。

我怎么解决这个问题?

注意:我必须使用纯Javascript,不允许使用jQuery:P。

据我所知,此错误有两个可能的原因,或者通常是appendChild错误。

  1. DOM尚未完成加载--->尝试将您的代码(任何附加到通过HTML呈现给DOM的代码)放入jQuery文档中。 或window.onload(即使在控制器中也适用于纯JavaScript。

  2. 第二个原因是传递了html节点以外的内容。 当我有一个函数返回要插入的节点数组时,就会发生这种情况。 因此,当它返回仅包含一个项目的数组时,我错误地将其视为节点,无法弄清为什么

认真地,使用jQuery。

如果不是,请至少使用NOT eval ,它很容易被欺骗和欺骗。

应该使用这个:

var album_photos = JSON.parse(xhr2.responseText);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM