从.get()创建的数组不会填充html选择

时间:2014-05-29 17:59:17

标签: javascript jquery arrays

这是破败的。我有一个外部.txt文件,它有许多位置(每行一个),我需要将其加载到我的脚本中以填充下拉列表。我使用.get()来提取数据,并将其放入数组中。它看起来正确,但下拉列表没有填充。做了一些测试,我发现当我声明数据时手动填充数组我声明加载正常。此外,如果我尝试对数组执行任何操作,例如将其转换为字符串,则不会发生任何事情,如果我尝试检查它报告的长度,我会尝试创建一个新数组并将第一个内容推入其中,但没有骰子。我也尝试过使用makeArray,但这并没有奏效。

到目前为止,这是我的代码:

var siteIdArray = [];
var path = "*snipped*/siteId.text";
var option = "";

$.get(path, function(data)
{
  siteIdArray = data.split("\n");
  console.log(siteIdArray);
});

for (i = 0; i < siteIdArray.length; i++)
{
  option += '<option value="'+ siteIdArray[i] + '">' + siteIdArray[i] + '</option>';
}
$('#siteId').append(option);

这是对我的siteIdAarray包含的内容的测试(完整数组共有62个项目):

["AN", "AZ", "BA", "CA"]

siteId.txt看起来像这样:

AN
AZ
BA
CA

2 个答案:

答案 0 :(得分:1)

$.get是异步调用,您必须使用回调内的响应对象完成所有工作或将其传递给另一个函数:

$.get(path, function(data)
{
  siteIdArray = data.split("\n");
  console.log(siteIdArray);

  for (i = 0; i < siteIdArray.length; i++)
  {
      option += '<option value="'+ siteIdArray[i] + '">' + siteIdArray[i] + '</option>';
  }
  $('#siteId').append(option);
});

答案 1 :(得分:1)

$.getasynchronous,因此所有依赖siteIdArray的代码都需要在回调函数中。

正在发生的事情是您的代码已经到达for循环但是在那个阶段{AJ}响应尚未填充sideIdArray,这就是为什么您对console.log的调用有效但是休息没有。

您的代码已更新:

var siteIdArray = [];
var path = "*snipped*/siteId.text";
var option = "";

$.get(path, function(data)
{
  siteIdArray = data.split("\n");
  console.log(siteIdArray);

  for (i = 0; i < siteIdArray.length; i++)
  {
    option += '<option value="'+ siteIdArray[i] + '">' + siteIdArray[i] + '</option>';
  }

  $('#siteId').append(option);
});