2014-03-29 147 views
1

所以我现在尝试了2个小时,而且我仍然无法弄清我的代码出了什么问题。我创建了一个简单的XMLHttpRequest,它从PHP页面获取信息,这是来自数据库的一些数据。这是我做了什么:Uncaught TypeError:无法读取json_encode()上未定义的属性“长度”

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。

+1

拜托,显示响应文本 –

+0

@VasilVanchuk,我得到的是响应文本的东西。 :P –

+0

起初 - 您没有检查readyState(如xhr2.readyState == 4)为岸,所有响应都已加载。你知道吗?其次 - 请在你的问题中添加响应主体 - 它有助于理解变量的结构和值 –

回答

0

对于这个错误有两种可能的原因,据我回忆,或者一般来说,appendChild有错误。

  1. 的DOM还没有完成负载--->尝试把你的代码,jQuery的文档准备内部(即追加到通过HTML渲染的DOM的任何代码)。或在window.onload(即使在控制器纯javascript。

  2. 的第二个原因是比一个html节点以外的内容被传递。 我这种情况发生时,我有其返回的节点的数组的函数插入。因此,当它返回只有一个项目的数组,我mistakingly想到这一点作为一个节点,无法弄清楚,为什么

0

严重的是,使用jQuery。

如果没有,使用的至少不是eval,它可以被欺骗,并且太容易使用FUBAR的东西。

应用本品:

var album_photos = JSON.parse(xhr2.responseText); 
相关问题