2012-04-12 223 views
3

我有AJAX请求,它从远程文件获取数据并显示在页面上的div中。当用户将鼠标悬停在链接上时,将调用AJAX并显示带数据的div,并且当鼠标移出链接时,它会消失。该div立即显示,但当鼠标移出时,鼠标移出和隐藏div之间会有大约5秒的延迟。中止AJAX请求

我认为它与AJAX请求阻塞隐藏功能有关,因为当我删除AJAX请求时div立即隐藏。

当鼠标从链接中移除并且无论如何都隐藏div时,是否有某些操作可以中止,杀死或忽略AJAX?

这里是我的代码至今:

$(function(){ 

var showPopup = function(){ 
    $.ajax({ 
     type: "GET", 
     url: "/process.cfm", 
     data: "id=" + 1, 
     success: function(data){ 
      $(".profilePopup").html(data); 

      if ($(data).find(".profileResult").length) { 
       var text = $(data).find(".profileResult").html(); 
       $(".profilePopup").html(text); 
      } 
     } 
    }); 

    $(".profilePopup").show(); 
} 

var hidePopup = function(){ 
    $(".profilePopup").hide(); 
} 

$("#username").mouseover(showPopup); 
$("#username").mouseout(hidePopup); 
}); 

回答

3

试试这个:

var xhr = $.ajax({ 
     type: "POST", 
     url: "some.php", 
     data: "name=Somename", 
     success: function(msg){ 
      alert("Data Saved: " + msg); 
     } 
    }); 

    //kill the request 
    xhr.abort() 
+0

我已经分配AJAX调用给一个变量,然后用中止()在hidePopup()函数把它打死了之前隐藏弹出。不幸的是,这并没有解决问题,并且弹出窗口在消失之前仍然“卡住”至少5-6秒。 – Eleeist 2012-04-12 16:17:09

0

可以终止Ajax请求,使用jxhr对象:

http://api.jquery.com/jQuery.ajax/#jqXHR

是这样的:

var jxhr_object = $.ajax({ 
    url: "some.php",  
    success: function(){ 
     do something 
    } 
}); 

//kill the request 
jxhr_object.abort() 
0
var xhr = $.ajax({ 
    type: "GET", 
    url: "/process.cfm", 
    async: true, 
    data: "your data", 

    success: function(msg){ 
     alert("Data Saved: " + msg); 
    } 
}); 

//kill the request 
xhr.abort() 

这不会让您的浏览器冻结。

异步:真实,