2011-12-17 155 views
1

我有以下jQuery代码,基本上充当一个输入自动完成。但是,当用户以相当快的速度键入某些内容(或对某些人而言速度正常)时,下拉框会在不同的自动完成之间来回跳动。就像我很快输入“开心”一样,它可能会在“开心”和“幸福”之间闪烁。我认为这是由数据发送和接收之间的延迟引起的。有什么方法可以解决这个问题?Ajax呼叫延迟

var textvalue= $(this).val(); 
    $("#facebookDropdown").html(" 
    loading... 
    "); 
    $.ajax({ 
    type: "GET", 
    url: "../invites/afterauth.php", 
    data: "q=" + textvalue, 
    success: 
    function(msg){ 
    $("#facebookDropdown").html(msg)} 
    }) 
+1

[?运行时,用户输入完,而不是重点了JavaScript函数(可能重复http://stackoverflow.com/questions/4220126/run-javascript功能当用户完成键入而不是键上) – Blender 2011-12-17 03:11:21

回答

0

我会放弃你发送的每一个ajax请求。这样他们就不会相互超越。另一种选择是在每次按键后等待几毫秒,以便在发送ajax请求之前查看是否有另一按键。前者响应性更强,但会导致更多的服务器负载,而后者的响应速度较慢,但​​会导致较少的服务器负载事实上,如果你愿意,你可以做到这两点。

if(previousRequest) { 
    previousRequest.abort(); 
} 

previousRequest = $.ajax(... 

此处了解详情: Abort Ajax requests using jQuery