2012-05-27 85 views
0

我有一個胡佛請求數據從服務器顯示的彈出窗口。但是,我可以阻止多個彈出窗口的唯一方法是使用同步ajax。我明白,同步阿賈克斯應該很少,如果永遠不會被使用。這可以異步完成嗎?我只是瞭解回調需要,並有一種感覺,他們是相關的。由於Popup without synchronous ajax

(function($){ 
    $.fn.screenshotPreview = function() { 
     xOffset = 20; 
     yOffset = 10; 

     this.hover(function(e) { 
      $.ajax({ 
       url: 'getPopup.php', 
       success: function(data) 
       { 
        $("body").append('<div id="screenshot">dl><dt>Name:</dt><dd>'+data.name+'</dd><dt>User Name:</dt><dd>'+data.username+'</dd></dl></div>'); 
        $("#screenshot") 
        .css("top",(e.pageY - yOffset) + "px") 
        .css("left",(e.pageX + xOffset) + "px") 
        .fadeIn("fast");      
       }, 
       async: false, 
       dataType: 'json' 
      }); 
     }, 
     function() { 
      $("#screenshot").remove(); 
     }); 
     this.mousemove(function(e) { 
      $("#screenshot").css("top",(e.pageY - yOffset) + "px").css("left",(e.pageX + xOffset) + "px"); 
     }); 
    }; 
})(jQuery); 
+1

可能(雖然間接)複製(HTTP [使用jQuery中止Ajax請求]的:// stackoverflow.com/questions/446594/abort-ajax-requests-using-jquery) –

+0

謝謝Kolink。看着中止()。那麼,與回調無關? – user1032531

回答

1

您想添加一個標記,你是否已經開始顯示彈出:

(function($){ 

    var showing = false; 

    $.fn.screenshotPreview = function() { 
     xOffset = 20; 
     yOffset = 10; 

     this.hover(function(e) { 
      if(!showing){ 
      showing = true; 
      $.ajax({ 
       url: 'getPopup.php', 
       success: function(data) 
       { 
        if(showing){ 
        $("body").append('<div id="screenshot">dl><dt>Name:</dt><dd>'+data.name+'</dd><dt>User Name:</dt><dd>'+data.username+'</dd></dl></div>'); 
        $("#screenshot") 
        .css("top",(e.pageY - yOffset) + "px") 
        .css("left",(e.pageX + xOffset) + "px") 
        .fadeIn("fast"); 
        }      
       }, 
       dataType: 'json' 
      }); 
      } 
     }, 
     function() { 

      showing = false; 

      $("#screenshot").remove(); 
     }); 
     this.mousemove(function(e) { 
      $("#screenshot").css("top",(e.pageY - yOffset) + "px").css("left",(e.pageX + xOffset) + "px"); 
     }); 
    }; 
})(jQuery); 
+0

一個低科技解決方案,但確實是我需要的。謝謝 – user1032531

+0

經過進一步調查,看起來您的解決方案几乎是正確的。需要使用Kolink的abort()。通過使變量ajax = $。ajax({...,然後在unhover ajax.abort() – user1032531