2014-03-29 62 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); 
相關問題