终止ajax进程



GET_DATA()

GET_DATA()包含以下内容:

    var xhr;
    ...
    function get_data( phrase ) {
        xhr = function get_data( phrase ) {
        $.ajax({
            type: 'POST',
            url: 'http://intranet/webservice.asmx/GetData',
            data: '{phrase: "' + phrase + '"}',
            contentType: 'application/json; charset=utf-8',
            dataType: 'json',
            success: function( results ) {
                $("#div1").empty();
                if( results.d[0] ) {
                    $.each( results.d, function( index, data ) {
                        $("#div1").append( data.Group + ':' + data.Count + '<br />' );
                    });
                } else {
                    alert( "results.d does not exist..." );
                }
            },
            error: function(xhr, status, error) {
                $('#spanLoading').empty();
                 var err = eval("(" + xhr.responseText + ")");
                 alert(err.Message) ;
            }
        });
    }
    function get_default() {
        $('#div1').empty().append("default stuff goes here");
    }

更新2代码

我也尝试过这种方法,它也不起作用,没有错误消息,只是在完成处理时返回文本框有2个字符的结果,即使我在处理完成之前删除了所有内容:

$('#TextBox1').keyup( function() {
    if(xhr && xhr.readystate != 4){
        xhr.abort();
    }
    if ($("#TextBox1").val().length >= 2) {
        get_data( $("#TextBox1").val() );
    } else {
        get_default();
    }
});

更新1代码:

$('#TextBox1').keyup( function() {
    if ($("#TextBox1").val().length >= 2) {
        get_data( $("#TextBox1").val() );
    } else {
        if(xhr)
        {
            xhr.abort();
        }
        get_default();
    }
});

原始问题:

我有以下代码:

$('#TextBox1').keyup( function() {
    if ($("#TextBox1").val().length >= 2) {
        get_data( $("#TextBox1").val() );
    } else {
        get_default();
    }
});

这有一个小故障,如果我键入的东西非常快,然后我同样快地删除它,我会在屏幕上看到get_default()的数据闪烁,然后它会被之前的ajax请求所取代,其中文本框中的值为2,但尚未完成处理。

所以基本上,我认为发生的事情是,当文本框中有2个字符时,ajax请求就会启动,这需要一秒或2秒的时间。当这种情况发生时,如果我删除这两个字符,我会看到get_default()是成功的,但当ajax数据完成时,它似乎会用ajax数据替换它。

我该如何阻止这种情况的发生?

感谢您发布get_data

AJAX调用没有中止的原因是xhr没有在适当的(窗口)范围中定义;因此,xhr.abort()什么都不做(如果您查看控制台,很可能会抛出一个错误)。

请尝试以下操作:

var xhr = false;
function get_data( phrase ) {
    xhr = $.ajax({ /* ... etc */
}

其余部分应按原样工作。

在执行ajax请求之前放置一个时间延迟。

function pausecomp(ms) {
    ms += new Date().getTime();
    while (new Date() < ms){}
}

相关内容

  • 没有找到相关文章

最新更新