0

我有一些javascript数组,我在函数中附加并在函数运行后调用(数据库信息是对CouchDB的调用):

$(document).ready(function() {

  my_array = [];

  view_name = db_name+'/farms_by_name'
  $db.view(view_name, {
    success: function(data) {
       console.log(data)
       for (i in data.rows) {
           console.log(data.rows[i]);
           plot_name.push(data.rows[i].value.name);
           my_array.push("0");
           console.log(my_array)
           console.log(my_array.length)
        }
    },
    error: function(e) {
      alert('Error loading from database: ' + e);
    }
  });

  console.log(my_array);
  console.log(my_array.length);

});

使用 firebug,我看到在函数中正确附加了数组,例如 console.log 返回的单个元素

my_array = ["0"]
my_array.length = 1

但是函数之后的console.log(首先出现在firebug日志中)显示:

my_array = [ ]
my_array.length = 1

在日志中检查时 my_array 显示:

[ ]
0              "0"

谁能向我解释这种行为并解释我应该如何正确附加数组,以便我可以在 db success 函数之外调用长度并正确循环它?

谢谢!

4

2 回答 2

1

zerkms 是对的:变量正在成功回调函数中进行更改。$(document).ready在名为 -say- logAfterSuccess的函数中添加第二个函数

function logAfterSuccess()
{
    console.log(my_array);
    console.log(my_array.length);
}

并简单地从成功回调中调用该函数:

success: function()
{
    //code goes here
    logAfterSuccess();
}

那应该会给您预期的结果

于 2012-05-04T10:59:03.697 回答
0

最后两个console.log将始终返回 [] 和 0,因为您正在检查回调函数之外的数组,如果您将检查移动到回调函数内部,您应该得到您想要的结果。

例如:

$(document).ready(function() {

  my_array = [];

  view_name = db_name+'/farms_by_name'
  $db.view(view_name, {
    success: function(data) {
       console.log(data)
       for (i in data.rows) {
           console.log(data.rows[i]);
           plot_name.push(data.rows[i].value.name);
           my_array.push("0");
           console.log(my_array);
           console.log(my_array.length);
        }
        afterArrayPopulated(my_array);
    },
    error: function(e) {
      alert('Error loading from database: ' + e);
    }
  });
});

function afterArrayPopulated(arr){
  console.log(arr)
  console.log(arr.length)
}
于 2012-05-04T10:56:06.477 回答