在javascript中未定义数组

时间:2011-04-02 04:48:20

标签: javascript jquery

我实际上是在尝试为sqlite数据库检索某些内容并将结果存储在数组中。所以我创建了一个数组并将其作为参数传递给函数。然后在函数返回后,数组仍未定义。有什么问题?

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

4 个答案:

答案 0 :(得分:1)

我真的不知道getGraphData函数在做什么,但看起来它是异步的。查看传入dbConnection.transaction的函数?这可能是一个操作完成后执行的回调,稍后会发生。您需要从那里处理结果。

此外,该函数作为参数'anArray'传递给数组,但您没有使用该参数,而是使用'resultsArray'。由于那个范围没有定义,所以你认为它不是同一个数组。

答案 1 :(得分: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
}

答案 2 :(得分:1)

我不太了解javascript,但有一些名为passByValue和PassByReference ...也许尝试设置你返回的内容,如:

    vatAdded=addVAT(orderTotal)

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

HTH

答案 3 :(得分:0)

来自resultsArray的{​​p> initGraphViewgetGraphData函数对象中不可见。

您需要将anArray更改为resultsArray