在调用XHR.abort()时捕获WebMethod中的中止

时间:2011-09-29 10:31:45

标签: jquery asp.net ajax webmethod

总结:我希望能够捕获WebMethod中的XHR.abort(),以便尽快停止执行服务器端代码。

我有一个webmethod,类似如下:

[WebMethod]
public static string GetHello()
{
    System.Threading.Thread.Sleep(5000);
    return "{\"result\":\"Hello!\"}";
}

在页面上,我使用以下javascript(jQuery)代码调用此方法:

var lastXHR = null;

function doCall() {

    if (lastXHR != null)
        lastXHR.abort();

    lastXHR = $.ajax({
        url: "default.aspx/GetHello",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        type: 'POST',
        error: function (jqXHR, textStatus, errorThrown) {
            if (textStatus.statusText == "abort") {
                // I know this was aborted here
                // Code omitted for simplicity
            }
        },
        success: function (data, textStatus, jqXHR) {
            var d = $.parseJSON(data.d);
            alert(d.result);
        },
        complete: function (xhr, status) {
            lastXHR = null;
        }
    });
}

我能够在客户端上使用此代码轻松处理abort(),但我希望Web服务器在XHR中止时停止执行GetHello()

我需要这样做的原因是因为在我的项目的服务器端,我正在调用数据库上的搜索,这可能需要很长时间才能完成,调用SqlCommand.Cancel()对我来说非常有益IT团队; - )

更新:我将尝试调用辅助WebMethod,其唯一目的是指示要取消同一客户端的先前呼叫。如果有效,请将此作为答案发布。

尽管如此,其他方法也会受到高度赞赏!

1 个答案:

答案 0 :(得分:1)