2011-04-02 108 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