2013-06-12 47 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版本1.9在這裏(primefaces) – xstring

回答

1

的問題是不是你做的回調被調用一次,但你改變每次調用它,因爲that具有循環結束的值callbaks被調用時的時間相同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

添加斷點在你完成的功能,看看會發生什麼。 –

+0

添加了我的新功能代碼。斷點只會被調用一次。但是我在comsole日誌中看到兩個http調用。 – xstring

0

我發現了什麼問題。 dystroys的答案是正確的,但沒有解決我最初的問題。所以事情是,當我在我的完成函數回調中有一個螢火蟲斷點時,它只會被調用一次。所以用螢火蟲設置斷點可能導致未解釋的js代碼... ffs!

相關問題