2013-07-25 117 views
-2
function getData() { 
    var photo, 
     comment, 
     url; 

    $.getJSON('http://url.info/verify/settings.php', function (data) { 
     photo = data.photoMSG; 
     comment = data.commentMSG; 
     url = data.photoURL 
    }); 
    console.log(photo); //undefined 
    console.log(comment); //undefined 
    console.log(url); //undefined 
} 

我得到的控制檯日誌中未定義的所有這些...如何讓這些3個變量在getJOSN塊之外可見?我知道這已被問到x100次,我嘗試了windiw.varName但仍然是同樣的事情。javascript可變範圍問題undefined

+1

異步調用*異步*。在回調函數中添加一個'console.log('now received');''! – deceze

回答

1

這不是一個範圍問題,它是一個異步問題。 getJSON處理程序中的所有內容都是異步的,因此console.log調用通常會在變量分配後發生。使用異步回調,而不是:

$.getJSON('http://url.info/verify/settings.php', function (data) { 
    photo = data.photoMSG; 
    comment = data.commentMSG; 
    url = data.photoURL; 
    callback(photo, comment, url); 
}); 
function(photo, comment, url) { 
    console.log(photo); //undefined 
    console.log(comment); //undefined 
    console.log(url); //undefined 
} 
+0

謝謝你,不知道! –

0

因爲$.getJSON做一個Ajax調用,但getJSON內的回調被調用之前之後的代碼被調用。所以這些變量仍未定義。異步行爲的典型「問題」。