2013-06-12 3 views
1
/** 
* Downloads the fingerprint preview data 
*/ 
this.fetchFingerprintPreviews = function (url) { 
    var that = this; 
    var dfd = jQuery.Deferred(); 

    jQuery.get(url) 
     .done(function (resp) { 
      var linkNodes = conn.getLinksViaRelation(resp, 
      'http://ws.bdr.de/webhd/hdcap/rels/finger-preview/'); 

      jQuery(linkNodes).each(function() { 
       var link = jQuery(this); 
       var fpIndex = link.prev("index, bdr\\:index").html(); 
       var fpType = link.attr('type'); 

       jQuery.get(link.attr('href'), {"encoding":"base64"}, null, "text") 
        .done(function (imageDataBase64) { 
         fingerprintPreview[fpIndex] = {}; 
         fingerprintPreview[fpIndex].imageData = imageDataBase64; 
         fingerprintPreview[fpIndex].type = fpType; 

         console.log(fingerprintPreview); 
         if (Object.keys(fingerprintPreview).length == 
         Object.keys(linkNodes).length) { 
          dfd.resolve(); 
         } 
        }); 

      }); 
     }); 

    return dfd; 
} 

어휘 로컬 변수를 사용하는 새 버전이 추가되었습니다. 그래도 작동이 안되는. 순간에 비트가 손실되었습니다 ... 또한 한 번만 호출되는 로그 문을 추가했습니다. 로그가 두 번 호출 될 것으로 예상됩니다.jquery 내 콜백은 한 번만 호출됩니다. 이유를 알지 못합니다.

어떤 아이디어가 있습니까?

+0

콘솔에서 오류를 확인하십시오. – gdoron

+0

하지만 콘솔에서 나는 두 개의 요청을 보았다. 모두 200 – xstring

+0

jquery version 1.9 here (primefaces) – xstring

답변

1

완료 콜백이 한 번 호출되지만, callback이 호출 될 때 that에 end of loop 값이 있기 때문에 호출 할 때마다 동일한 fingerprintPreview을 변경하는 것이 문제가 아닙니다.

솔루션은 당신이 each에 제공하는 기능에 선언이 외부에서 선언 된 변수지만 새, 재사용하지 않는 것입니다 :

jQuery(linkNodes).each(function() { 
    var link = jQuery(this); 
    var fpIndex = link.prev("index, bdr\\:index").html(); 
    var fpType = link.attr('type'); 

    jQuery.get(link.attr('href'), {"encoding":"base64"}, null, "text") 
     .done(function (imageDataBase64) { 
      fingerprintPreview[fpIndex] = {}; 
      fingerprintPreview[fpIndex].imageData = imageDataBase64; 
      fingerprintPreview[fpIndex].type = fpType; 

      if (Object.keys(fingerprintPreview).length == Object.keys(linkNodes).length) { 
       alert("foo"); 
      } 
     }); 

}); 
+0

여전히 작동하지 않습니다. 전체 함수 코드를 추가했습니다 ... – xstring

+0

done 함수에 중단 점을 추가하여 어떤 일이 발생하는지 확인합니다. –

+0

에 새 기능 코드가 추가되었습니다. 중단 점은 한 번만 호출됩니다. 하지만 comsole 로그에서 두 번의 http 호출을 볼 수 있습니다. – xstring

0

내가 문제가 무엇인지 발견합니다. dystroys 대답은 정확하지만 내 원래의 문제를 해결하지 못했습니다. 그래서 그 일은 내가 완료 한 함수 콜백에 방화 광 브레이크 포인트가있을 때 단지 한 번만 호출된다는 것입니다. 방화 광로 설정된 중단 점을 사용하면 해석되지 않은 js 코드로 이어질 수 있습니다 ... ffs!

관련 문제