关键字事件的jQuery .abort()

时间:2014-05-21 19:15:31

标签: javascript jquery

我知道这个问题在很多方面都有问题,我也能够让它发挥作用。它只能与键*事件结合使用... 为什么.abort()不能使用此功能?

function setGlobalSearch(){
    var xhr;
    $('#globalSearch').keyup(function(){
        if(xhr && xhr.readystate != 4){
            xhr.abort();
        }
        var searchVal = $(this).val();
        xhr = $.ajax({
            type: "GET",
            url: "/ajax.actions?i=globalSearch&q="+searchVal,
            success: function(data) {
                $('#globalSearchResults').html(data);
            },
            dataType:"html",
            cache:false
        });
    });
}

1 个答案:

答案 0 :(得分:2)

abort()功能仅在请求已发送时才会触发。我只能建议情况可能并非如此。

但是,我建议使用一种不同的模式来消除中止请求的必要性,正如您所见,这种模式偶尔会有点不稳定。相反,我只会在键入停止一段时间后触发请求。试试这个:

var timer;
$('#globalSearch').keyup(function() {
    clearTimeout(timer);
    timer = setTimeout(function() {
        var searchVal = $(this).val();
        $.ajax({
            type: "GET",
            url: "/ajax.actions?i=globalSearch&q="+searchVal,
            success: function(data) {
                $('#globalSearchResults').html(data);
            },
            dataType:"html",
            cache:false
        });
    }, 150); // fire the AJAX request 150ms after typing stops.
});
相关问题