首页 > 解决方案 > 在包括 $get (jQuery) 的 for 循环中填充一个数组 - i 没有增加

问题描述

我想收集一个谷歌页面的所有图片网址。使用 $get 函数,我设法使用 console.log() 列出了我的控制台中的所有 URL,但是如果我尝试在一个数组中获取 URS,我就会遇到问题,即“i”不会增加;它具有最后一个 URL 的数量,这意味着:200。Tahts 我的代码:

function getUrls2(){

var imgArray = ['1','2'];
var imgUrl = '';
var i = 0;

var imagesDiv = document.getElementsByClassName('rg_bx');
  for (i = 0;i < imagesDiv.length; i++){   

var imgHref = imagesDiv[i].querySelectorAll('a')[0].href;

  $.get(imgHref, null, function(text){
      imgUrl = text.split('</script><title>Google')[1].split('\"')[1];
      if (imgUrl && imgUrl.includes('http')){

      console.log(i+'------>'+imgUrl);

      imgArray.push = (imgUrl);
      console.log(imgArray[i]);   
      }

  });

  };


};

(在该行

var imgHref = imagesDiv[i].querySelectorAll('a')[0].href;

'i' 具有正确的值,但在 $get - 函数中,'i' 始终为 200。)

控制台提供以下输出:

200-----> https://i1.wp.com/www.littlebighero.ch/wp-content/uploads/2018/01/IMG_3206-e1515821215393-768x1024.jpg?resize=525%2C700&ssl=1 Scratchpad /1:110:19

未定义 Scratchpad/1:113:19

200-----> https://i0.wp.com/www.littlebighero.ch/wp-content/uploads/2018/01/IMG_3212-e1515821270358-768x1024.jpg?resize=525%2C700&ssl=1 Scratchpad /1:110:19 未定义 Scratchpad/1:113:19

200-----> https://i.ytimg.com/vi/e8bXuWe0vlk/maxresdefault.jpg Scratchpad/1:110:19 未定义 Scratchpad/1:113:19

等等...

标签: javascriptjquery

解决方案


i在闭包中使用它之前制作一个副本:

function getUrls2(){

var imgArray = ['1','2'];
var imgUrl = '';
var _i = 0;

var imagesDiv = document.getElementsByClassName('rg_bx');
for (_i = 0; _i < imagesDiv.length; _i++){   

  var i = _i;
  var imgHref = imagesDiv[i].querySelectorAll('a')[0].href;
  $.get(imgHref, null, function(text){
      imgUrl = text.split('</script><title>Google')[1].split('\"')[1];
      if (imgUrl && imgUrl.includes('http')){

      console.log(i+'------>'+imgUrl);

      imgArray.push = (imgUrl);
      console.log(imgArray[i]);   
      }

  });

  };


};

推荐阅读