2012-10-08 32 views
0

我試圖製作一個菜單,其中包含從last.fm API中提取的藝術家名稱和圖像。目前,它生成的圖像和名稱罰款清單,除了在列表頂部打印「未定義」。我試着用藝術家名字/圖像來評論元素,並且只是讓它生成元素,但它仍然會打印未定義的元素。我完全難以理解它所說的未定義。Javascript生成的HTML也打印「undefined」

首先,它使一個AJAX調用來獲取所需的信息:它處理信息,並生成它與inner.HTML

var artistsAndImage = {}; 

for (var i=0; i < artistList["artists"]["artist"].length; i++) { 
var name = artistList["artists"]["artist"][i]["name"]; 
artistsAndImage[name] = artistList["artists"]["artist"][i]["image"][0]["#text"]; 
}; 
var code; 
// Generate HTML for sidebar with artist names and iamges 
for (var name in artistsAndImage) { 
nameid = name. 
     replace(/ /g, "_"). 
     replace(/&/g, ":amp"). 
     replace(/\+/g, ":plus"); 
code += "<element id=\"" + nameid + "\" onclick=\"details(this)\">\n<p style = \"cursor:default\">\n <img src=\"" + artistsAndImage[name] + "\" alt=\"alt\" width = \"50\" height = \"50\">\n" + name + "\n</p> </element>\n"; 
}; 
document.getElementById("sidebar").innerHTML = "<div style = \"padding:20px\">" + code + "</div>"; 

實現HTML哪裏「未定義

if (window.XMLHttpRequest) { // Non-IE browsers 
httpRequest = new XMLHttpRequest(); 
} 
else if (window.ActiveXObject) { // IE 8 and older 
httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); 
} 

httpRequest.open("GET", 'http://ws.audioscrobbler.com/2.0/?method=chart.gettopartists&api_key=b25b959554ed76058ac220b7b2e0a026&format=json', true); 

httpRequest.onreadystatechange = function() { 
var done = 4, ok = 200; 
// Parse the JSON into JavaScript immediately on receipt 
if (httpRequest.readyState == done && httpRequest.status == ok) { 
    artistList = JSON.parse(httpRequest.responseText); 

然後「來自,我該如何解決?你可以看到頁面的當前版本上傳這裏:http://test.yukot.corp.he.net/

+2

可能重複[什麼導致了這種額外的 「不確定」?](http://stackoverflow.com/questions/7381618/what- IS-造成此結果超未定義) –

回答

0

實例化var code;爲空字符串:

var code = ''; 
0

乍一看,我可以看到undefined的三種可能的原因顯示出來,無論是artistList["artists"]["artist"][i]["image"][0]["#text"]並不總是存在(此行爲)
之後,您將定義一個變量code,但其值會(自動)設置爲undefined,但不會將其初始化爲字符串:var code = '';應解決該問題。
另一解釋是通過對象的循環,不,如果你正在處理該屬性的實例本身定義的檢查:

var code = ''; //initialize code to empty string 
for (var name in artistsAndImage) 
{ 
    if (artistsAndImage.hasOwnProperty(name)) 
    { 
     code += 'First string'; 
     //only process those that are instance properties 
    } 
} 

要絕對肯定的是,你可以檢查undefined,太:

var code = ''; 
for (var name in artistsAndImage) 
{ 
    if (artistsAndImage.hasOwnProperty(name) && artistsAndImage[name] !== undefined) 
    { 
     //only process those that are instance properties 
    } 
} 

在控制檯試試這個:的

var code;//code is set to undefined 
code += 'part of a string'; 
console.log(code);//logs: undefinedpart of a string