杀死一个ajax进程

时间:2012-03-29 10:51:08

标签: ajax jquery

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.当发生这种情况时,如果我删除了2个字符,我会看到get_default( )成功,但似乎在ajax数据完成时用ajax数据替换它。

如何阻止这种情况发生?

2 个答案:

答案 0 :(得分:1)

感谢您发布get_data

您的AJAX调用未被中止的原因是xhr未在相应的(窗口)范围中定义;因此,xhr.abort()没有做任何事情(如果你看看你的控制台,很可能会抛出错误。)

请尝试以下方法:

var xhr = false;

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

其余的应该按原样运作。

答案 1 :(得分:0)

在执行ajax请求之前放一段时间。

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