javascript - 数组索引在 $.get 中不起作用

标签 javascript jquery arrays web-scraping

我正在处理的程序有一个数组,里面有一堆网址,例如:

var urls = ["http://www.url.com/page1", "http://www.url.com/page2", "http://www.url.com/page3"];

然后我循环遍历这个数组,以便根据每个网址运行一些代码:

for (var i = 0; i < urls.length; i++) {
    $.get(urls[i], function(response) {
        console.log(urls[i]);
    });

我正在使用 $.get 从站点上的另一个页面提取数据,我的问题是 console.log 显示未定义?更奇怪的是,如果我将 url[1] 或任何值作为数字传递到 console.log,那么它会从数组中返回 url 吗?

此外,如果我像这样记录当前的 for 循环索引

console.log([i]);

然后它只输出 3,三次。

最佳答案

您需要一个闭包来保存 i 变量。变量的竞争是全局的,当 for 结束时,该值是 urls.length + 1。相反,如果您在 IIFE 中关闭代码您保留了变量的值,因为它获得了函数作用域。

您可以使用现代浏览器

let instead of var: declares a block scope local variable, optionally initializing it to a value.

改变:

for (var i = 0; i < urls.length; i++) {
$.get(url[i], function(response) {
    console.log(urls[i]);
});

收件人:

for (var i = 0; i < urls.length; i++) {
  (function (i) {
      $.get(url[i], function(response) {
          console.log(urls[i]);
      });
  })(i);

关于javascript - 数组索引在 $.get 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46063678/

相关文章:

java - 代码中的数字问题

java - 如何显示列表中的最小值和最大值?

javascript - 无法通过窗口对象访问全局变量 - 间歇性地(?!)

javascript - 从父级中删除标签,但不从子级中删除标签

javascript - 在 javascript 中返回数组和子数组

php - 使用移动网页检测 Android 应用程序是否已安装在设备上 - PHP 和 JS

javascript - 首先在 10 秒内调用 javascript 函数,然后每 25 秒调用一次 [jQuery]

javascript - 在元素加载时调用 javascript 函数

javascript - 在 ReactBootstrap Modal 中使用 KendoReact DropDownList

java - 如何使用 ArrayList 作为方法中的参数来从类的 ArrayList 中删除元素?