2011-04-02 111 views
1

我實際上試圖爲sqlite數據庫檢索某些內容並將結果存儲在數組中。所以我創建一個數組並將其作爲參數傳遞給該函數。然後在函數返回後,數組保持未定義狀態。那有什麼問題?在javascript中未定義數組

function initGraphView() 
{ 
    var resultsArray=new Array(12); 
    getGraphData(defaultQueryString,resultsArray); 
    alert(resultsArray[0]); //undefined 
} 
 
    getGraphData=function(queryString,resultsArray) 
{ 
dbConnection.transaction(function(tx){ 
tx.executeSql(queryString, [], 
    function(SQLTransaction, data) 
    { 
     for(var i=0;i
+0

請發表您的全getGraphData功能也通常數組被初始化爲'var resultsArray = [];' – errorhandler 2011-04-02 04:50:00

+0

@Erik,是它在谷歌瀏覽器上運行的 – chaitanya 2011-04-02 04:54:36

+0

@errorhandler它是整個函數 – chaitanya 2011-04-02 04:54:57

回答

1

我真的不知道什麼getGraphData功能是幹什麼的,但看起來它是異步的。查看傳入dbConnection.transaction的函數?這可能是一個回調,一旦操作完成後再執行一次。您將需要處理來自那裏的結果。

此外,該函數將作爲參數'anArray'傳遞給數組,但您不使用該參數,而是使用'resultsArray'。由於該範圍沒有定義,因此它與您想象的陣列不同。

1

您不會將函數getGraphData的返回值分配給任何變量。

resultsArray = getGraphData(defaultQueryString,resultsArray);

function initGraphView() 
{ 
    var resultsArray=new Array(12); 
    resultsArray= getGraphData(defaultQueryString,resultsArray); 
    alert(resultsArray[0]); // undefined. 
} 




getGraphData=function(queryString,anArray) 
{ 
dbConnection.transaction(function(tx){ 
tx.executeSql(queryString, [], 
    function(SQLTransaction, data) 
    { 
     for(var i=0;i<data.rows.length;i++) 
     { 
     var row = data.rows.item(i); 
     var aName = row[name]; 
     var aMonth=row[month]; 
     var total=row[totalAmount]; 
     var aCategoryName=row[categoryName]; 
     anArray[parseInt(aMonth)]=parseFloat(total); 
     } 
    } 
) 
}); 

return anArray; // use return statement here 
} 
+0

試過了,它不起作用。我猜是因爲處理請求的異步行爲。 – chaitanya 2011-04-02 05:00:04

+0

@chaitanya:請現在檢查我編輯我的答案。 – Gaurav 2011-04-02 05:12:27

+0

你的回答在正常情況下是正確的,但是因爲我使用這個腳本從數據庫中獲取數據,所以對它的調用是異步的,因此數組出現未定義。 – chaitanya 2011-04-04 21:41:20

0

resultsArrayinitGraphView不在getGraphData功能對象是可見的。您需要將anArray更改爲resultsArray

1

我不知道JavaScript的很好,但有一些所謂的passByValue和PassByReference ...也許嘗試設置你回什麼,是這樣的:

vatAdded=addVAT(orderTotal) 

    function addVAT(value){ 
     var newValue 
     newValue=value*1.07 
     return newValue 
    } 

HTH