2013-07-10 29 views
-1

第一功能從URL獲取JSON並將其推入陣列陣列JSON對象是未定義當傳遞到功能

var resultsArr = new Array(); 

// getResults() 
// JSON response function -> takes uuid returned from search query 
// and pings reponse url for any/all JSON objects of returned data 
function getResults(req_uuid) { 
    console.log("url fetched"); 
    $.getJSON($SCRIPT_ROOT + "/respond?id=" + req_uuid, function(data) { 
     console.log(data); 
     resultsArr.push(data); 
    }); 
} 

我有一個按鈕的點擊,將通過uuid成運行另一個功能getResults()在給定的時間間隔。這一切都工作。我甚至將整個數組轉換爲一個字符串,並在調用該函數之前將其附加到一個div中。 (這也是可行的)。我在調用之前記錄數組中元素的數量;

console.log(resultsArr.length + " items in array")

此日誌= 4 items in array

則函數被調用;

function showResults(array) { 
    var index = array.length; 
    console.log(index + " items in array"); 

} 

這會返回undefined items in array。我感到非常困惑。

+0

'resultsArr'的範圍是什麼?如果您要對其進行全局引用,請確保它在全局範圍內,即未在函數內定義。 – Candide

+4

如何調用showResults? –

+0

看到這個:http://stackoverflow.com/questions/17460556/undefined-return-value-from-the-function-call-javascritpt/17460802#17460802 – slebetman

回答

1

在收到新數據並將其推送到ajax回調中的數組後,您想要調用showResults()

var resultsArr = new Array(); 

// getResults() 
// JSON response function -> takes uuid returned from search query 
// and pings reponse url for any/all JSON objects of returned data 
function getResults(req_uuid) { 
    console.log("url fetched"); 
    $.getJSON($SCRIPT_ROOT + "/respond?id=" + req_uuid, function(data) { 
     console.log(data); 
     resultsArr.push(data); 
     showResults(resultsArr);// <--- here 
    }); 
} 
+0

但是由於'showResults'正在通過for results循環遍歷'resultsArr',所以會重新顯示每個元素 – frankV

+1

請原諒我的無知,但我不知道'showResults()'函數內沒有看到循環。我可能會錯過一些東西。如果涉及到循環,你可以發佈更多的代碼嗎? –

+0

你是對的我沒有發佈。爲了簡潔起見,我只是粘貼到相關部分。不過,感謝您的幫助。 – frankV