2012-05-27 28 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