실행 순서대로 동시 Google 이미지 검색을 주문하는 방법은 무엇입니까?

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

문제

안녕하세요,이 문제에 어떻게 접근 해야할지 잘 모르겠습니다. HTML IMG 요소의 배열이 전달되는 함수가 있습니다. 빈 "이미지 없음"Thumb Nail을 사용하여 이미지의 SRC 속성을 확인하는이 이미지를 통해 루프합니다. 그런 다음 IMG 태그 ALT 속성을 쿼리로 사용하여 이미지 검색을 실행합니다. 검색의 콜백 함수는 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'));
    }
  });
}
도움이 되었습니까?

해결책

이것이 내가 관심있는 사람과 자기 알림을 위해 내가 Encase를 수행하게 된 것입니다.

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