Как заказать параллельный поиск картинок Google в порядке их исполнения?

StackOverflow https://stackoverflow.com/questions/1425313

Вопрос

Привет всем, я не уверен, как подойти к этой проблеме. У меня есть функция, которая передается массив элементов HTML img. Он просматривает эти изображения, проверяя атрибут SRC для изображений, используя пустое поле «Нет изображения». большой палец ногтя Затем он выполняет поиск изображения, используя в качестве запроса атрибут ALT тегов img. Функция обратного вызова при поиске заменяет Img SRC первым результатом изображения.

У меня проблемы с сопоставлением правильного изображения с соответствующим поисковым обратным вызовом. Прямо сейчас я просто создаю массивы и сопоставляю возвращенный поиск с индексом для изображений. Поскольку множественный поиск выполняется одновременно, в зависимости от размера изображения или задержки в сети, они могут выполнить обратный вызов не по порядку и смешать изображения.

Мне нужен подход, который позволил бы мне связать индивидуальный поиск с HTML-элементами. Возможно ли это с помощью searchController и нескольких объектов imageSearch?

Ниже приведен пример функции, которую я использую

google.load('search', '1');

function googleFillBlanks(jqueryImages){

  //namePairs holds the images matching alt text and attachedCount is used for matching up once the call back is fired
  var attachedCount = 0;
  var namePairs = [];

  function searchComplete(searcher){
    if (searcher.results && searcher.results.length > 0) {
       var results = searcher.results;
       var result = results[0];
       $("img[alt='"+namePairs[attachedCount]+"'] ").attr('src', result.tbUrl);
       //jqueryImages.get(0).attr('src', result.tbUrl);
       attachedCount++;
    }
  }

   var imageSearch = new google.search.ImageSearch();

    //restrict image size
    imageSearch.setRestriction(google.search.ImageSearch.RESTRICT_IMAGESIZE,
                               google.search.ImageSearch.IMAGESIZE_SMALL);

    imageSearch.setSearchCompleteCallback(this, searchComplete, [imageSearch]);

  jqueryImages.each(function(){
    if($(this).attr('src').substr(-12,8) == 'no_image')
    { 
      namePairs.push($(this).attr('alt'));
      imageSearch.execute($(this).attr('alt'));
    }
  });
}
Это было полезно?

Решение

это то, что я в конечном итоге делал, если кто-то заинтересовался, и для напоминания о себе

google.load('search','1');
function checkImages(){

 // Here is the closure!
 var myClosure = function(img){return function(){
  if(this.results&&this.results.length>0){
   var result = this.results[0];
   img.src = result.tbUrl;
   img.alt = result.titleNoFormatting;
  }
 }};

 var imgs = document.getElementsByTagName('img');
 for(var i=0;i<imgs.length;i++){
  var img=imgs[i];
  if(img.src.match(/no_image.{4}/)){
   var is = new google.search.ImageSearch();
   is.setSearchCompleteCallback(is, myClosure(img));
   is.execute(img.alt);
  }
 }
}
google.setOnLoadCallback(checkImages);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top