【发布时间】:2014-03-08 07:37:09
【问题描述】:
我在 for 循环中有一些 AJAX 请求。循环遍历 URL 数组并向所有 URL 发送请求,检查每个页面上的某些内容,然后包含正确数据的页面将一些数据写入数组。该数组是一个“全局”变量。
循环工作正常。请求工作正常。阵列无法正常工作。请求 1 的 done() 函数将推送到数组,但下一个 done() 将只是覆盖。这种情况总是发生在 done() 快速连续调用将覆盖数组的部分而不是添加到它的地方。我不知道为什么会这样。
我了解 AJAX 调用以奇怪的顺序和时间返回,但我认为我使用 array.push() 可以解决指定索引的需要。怎么回事?
var globalArray = [];
for (var i = 0; i < URLList.length; i++)
{
(function (i) {
$.ajax(
{
url: URLList[i],
cache: false
}).done(function(html)
{
if (html.indexOf('someString') != -1)
{
globalArray.push(URLList[i]);
}
});
})(i);
}
所以基本上,即使第二个 done() 在第一个 done() 之后触发,第二个 done() 的 array.push() 也会假装数组是空的。我不知道为什么每次都不检查。
【问题讨论】:
-
if (html.indexOf('someString') !=) 可能缺少 -1 ==>> if (html.indexOf('someString') != -1)。此外,我不明白为什么需要函数 (i) - 只需将代码放在 for 循环中并直接引用 I。该函数没有添加任何内容。
-
我的错。 -1 已经在我的代码中。我只是在传输过程中意外删除了它。它在一个函数中,因为没有它它就无法工作。我不记得确切的原因。唉,问题出在数组上,而不是循环上。
-
globalarray 定义是否正确? var globalArray = []; ??
-
URLList[i] 真的有 href 属性吗?它看起来像是来自 ajax 调用的字符串数组?
-
再一次,我的错误。我的代码略有不同 - 我在这里简化了版本。不会有什么不同。
标签: javascript jquery ajax arrays loops