2016-02-08 91 views
0

我正在調試一個問題,其中$ .active值在發出AJAX請求動態加載iFrame(這是頁面已經加載之後)後沒有減少。以下是加載iFrame的源代碼:

 function initializeiFrame(id, frameborder, iFrameSrc) { 
      var iFrameSelector = $('<iframe id="' + id + 'iFrame" name="' + id + '" allowtransparency="true" scrolling="no" frameborder="' + frameborder + '" style="display: none; top: 0px; left: 0px; position: absolute">&nbsp;</iframe>'); 
      iFrameSelector.appendTo("#hiddenIFrameContainer"); 
      iFrameSelector.attr('src', iFrameSrc); 
      return iFrameSelector; 
     } 

     iFrameSelector = initializeiFrame(id, frameborder, iFrameSrc); 

     iFrameSelector.load(function() { 
      doWorkAfteriFrameLoad(...); 
     }); 

此代碼在第一次加載iFrame時工作正常。第二次調用此代碼(對於不同的iFrame,但重用相同的代碼)時,它會鎖定,因爲在我們的應用程序中,我們在允許發送AJAX請求(我們限制請求數量)之前檢查$ .active值。顯然,當動態加載iFrame時,$ .active值不會被減少。因此,下一次加載時,$ .active值太高,消息永遠不會發送到服務器。有任何想法嗎?

回答

0

如果有人遇到類似的問題,我想清楚了(在敲了我的頭2天后)。我在事件處理程序內執行此項工作,事先未調用event.preventDefault()。顯然,不包括這個代碼有一個非常令人討厭的副作用,即雙倍遞增$ .active變量。我仍然不知道該怎麼做,因爲即使我正在調試jQuery本身,我也不會看到它變爲2.如果我添加了console.log或調試器語句,問題就會消失。所以在我看來,這是一種非常奇怪的競爭條件。無論如何,這就是我如何修復它,以便其他人可能不必經歷我所做的可怕痛苦。