2012-05-27 3 views
0

У меня есть всплывающее окно, которое на пылесосе запрашивает данные с сервера для отображения. Единственный способ предотвратить множественные всплывающие окна, однако, заключался в использовании синхронного ajax. Я понимаю, что синхронный аякс должен редко использоваться, если его не использовать. Можно ли это сделать асинхронно? Я просто узнаю, что обратные вызовы необходимы, и у них есть чувство, что они связаны. БлагодаряВсплывающее окно без синхронного 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

возможно (хотя и косвенное) дубликата [ABORt запросов Ajax с использованием JQuery] (HTTP: // 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(). Сделал это, сделав переменную ajax = $. Ajax ({..., а затем в unhover ajax.abort() – user1032531

Смежные вопросы