2017-07-31 29 views
2

的Javascript:I have a dynamically filled array named resultsAuthor, when I log this object, I get this.(登錄,因爲我需要的長度來遍歷對象,這是不工作)1 但是,當我嘗試登錄resultsAuthor.length,我得到0 任何人都知道我在做什麼錯了?Arraylength 0,但13物體

This is in my utils.js

從那裏我把它在我main.js這樣的:

var searchCriteria = document.querySelector('[title="tbxZoeken"]').value; 
var searchAuthor = new Utils.GetBookinfoByAuthor(searchCriteria); 
var resultsAuthor = searchAuthor.loadData(); 

console.log(resultsAuthor); // returns the object 
console.log(resultsAuthor.length); // returns 0 

謝謝!

+2

提供您的代碼,否則無法幫助。你可能沒有閱讀好的變種,或者你已經刪除了它們之間的條目...... –

+0

向我們展示你的代碼,如果你有代碼,也是一個jsfiddle。 – Jacksonkr

+0

我的猜測是你從AJAX進程中填充數組,但在承諾返回數據之前試圖記錄數組的長度。編輯:嘿!看起來我是對的... :) – Andy

回答

1

當您打印resultsAuthor.length你的Ajax調用可能已經沒有加載完成,所以返回0 如果打印resultAuthor這仍然是原來的變量的引用,所以它得到正確打印。

要解決此問題,您可以使用回調函數或承諾。隨着回調,你可以做這樣的事情:

在你utils.js

GetBookinfoByAuthor: function (auteur) { 
    //... 
    this.loadData = function(callback) { 

     // Rest of your code... 

     // Request returned sucessfully 
     if (xhr.status === 200) { 

      //Rest of your code....    

      for (var i = 0; i < data.length; i++) { 
      // add all books to array 
      } 

     // All books a loaded 
     callback(books) 
    } 
    } 
} 

在你main.js

var searchCriteria = document.querySelector('[title="tbxZoeken"]').value; 
var searchAuthor = new Utils.GetBookinfoByAuthor(searchCriteria); 
searchAuthor.loadData(function() { 
    console.log(resultsAuthor); 
    console.log(resultsAuthor.length); 
}); 
+0

感謝您的回覆, 當我加入這個我的代碼我得到一個錯誤說「回調不是一個函數 在XMLHttpRequest.xhr.onload」 ,應該我resultsAuthor.length工作時,我這個回調添加到我的代碼? 這對我來說都很新,所以我很難理解這一切...... – Annelien