终止ajax进程

终止ajax进程,ajax,jquery,Ajax,Jquery,获取数据() GET_DATA()包含以下内容: var xhr; ... function get_data( phrase ) { xhr = function get_data( phrase ) { $.ajax({ type: 'POST', url: 'http://intranet/webservice.asmx/GetData', data: '{phr

获取数据()

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");
    }

更新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 {
        if(xhr)
        {
            xhr.abort();
        }

        get_default();
    }
});
我有以下代码:

$('#TextBox1').keyup( function() {
    if ($("#TextBox1").val().length >= 2) {
        get_data( $("#TextBox1").val() );
    } else {
        get_default();
    }
});
这有一个小问题,如果我输入一些非常快的内容,然后以同样快的速度删除它,我会在屏幕上看到
get_default()
flash中的数据,然后它会被以前的ajax请求替换,其中文本框中的值为2,但尚未完成处理

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


如何阻止这种情况发生?

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

function pausecomp(ms) {
    ms += new Date().getTime();
    while (new Date() < ms){}
}
函数pausecomp(毫秒){
ms+=新日期().getTime();
while(新日期()
感谢您发布
获取数据

AJAX调用没有被中止的原因是
xhr
没有在适当的(窗口)范围内定义;因此,
xhr.abort()

请尝试以下操作:

var xhr = false;

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

其余部分应按原样工作。

可能是的副本。看一看,我已经试过了,如果我在删除时转到fast,它会给我一个Method=Post,Status=(取消)错误消息。如果我一次删除一个字符,并允许每个进程完成,则不会收到错误消息。请查看上面更新的代码。请让我们看一看您的
get_data
函数好吗?@vzwick,是的,我在上面添加了它。@vzwick,我很快就跟您谈过了,我用这种方法遇到了很多错误。如果短语=john,那么一旦我完成键入,如果我单击backspace 4次以删除字符john,它将在控制台中给我5个POST(取消)错误。我与soon交谈过,使用此方法我会收到很多错误。如果
短语=john
,那么一旦我完成键入,如果我单击backspace 4次删除字符
john
,它将在控制台中显示
5
POST
(取消)
错误。