javascript - 方法 POST,状态(已取消)错误消息

标签 javascript ajax jquery readystate

我有以下代码,它给我一个Method POST, Status (canceled)错误信息:

$(document).ready(function() {
    var xhr = false;

    get_default();

    $('#txt1').keyup( function() {
        if(xhr && xhr.readyState != 4){
            alert("abort");
            xhr.abort();
        }

        if ($("#txt1").val().length >= 2) {
            get_data( $("#txt1").val() );
        } else {
            get_default();
        }
    });

    function get_data( phrase ) {
        xhr = $.ajax({
            type: 'POST',
            url: 'http://intranet/webservices.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, result ) {
                        $("#div1").append( result.Col1 + ' ' + result.Col2 + '<br />' );
                    });
                } else {
                    alert( "no data available message goes here" );
                }
            },
            error: function(xhr, status, error) {
                 var err = eval("(" + xhr.responseText + ")");
                 alert(err.Message) ;
            }
        });
    }

    function get_default() {
        $('#div1').empty().append("default content goes here.");
    }

});

代码实际上只要每个 ajax 请求完成就可以工作,但是如果我快速键入 txt1,即在上一个请求完成之前键入下一个字符,我会收到错误消息 Method POST,状态(已取消)

有人知道为什么会发生这种情况以及如何纠正错误吗?

最佳答案

我想这个问题很简单。如果您调用 xhr.abort();然后是 error $.ajax的回调将为待处理的请求调用。所以你应该忽略 error 中的这种情况打回来。所以 error处理程序可以修改为

error: function(jqXHR, textStatus, errorThrown) {
    var err;
    if (textStatus !== "abort" && errorThrown !== "abort") {
        try {
            err = $.parseJSON(jqXHR.responseText);
            alert(err.Message);
        } catch(e) {
            alert("ERROR:\n" + jqXHR.responseText);
        }
    }
    // aborted requests should be just ignored and no error message be displayed
}

附言可能是另一个我的 old answer关于关闭问题也可能对您感兴趣。

关于javascript - 方法 POST,状态(已取消)错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9928580/

相关文章:

javascript - 可变数量的切片 : Pie Chart concept

javascript - ChartJs 中 X 轴的特定网格线

php - AJAX 定期检查

javascript - 仅当先前的弹出窗口关闭时才会显示多个 JavaScript 超时弹出窗口

jquery - 使用 Jquery 从 div 中删除文本

php - 错误 : mysql_fetch_array() expects parameter 1 to be resource, 中给出的 bool 值

javascript - 即使安装了 Xcode 和模拟器,Deco 模拟器也无法工作?

javascript - 自动列出具有异步加载的 require.js 依赖项以进行 r.js 优化

javascript - 使用 jQuery 和 Ajax 更改操作提交表单

ajax - jsf ajax部分渲染