我实际上是在尝试为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
答案 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> initGraphView
在getGraphData
函数对象中不可见。
您需要将anArray
更改为resultsArray
。