Jquery 为什么对ajax请求调用abort()会导致ASP.Net MVC(IE8)中出现错误

Jquery 为什么对ajax请求调用abort()会导致ASP.Net MVC(IE8)中出现错误,jquery,asp.net-mvc,ajax,Jquery,Asp.net Mvc,Ajax,我使用jquery发布到MVC控制器操作,该操作返回一个信息表。该页面的用户通过单击各种链接触发此操作 如果用户决定快速连续单击这些链接,我想取消之前可能尚未完成的任何ajax请求 我发现,当我这样做时(尽管从客户端的POV来看这很好),我会在web应用程序上看到这样的错误 “参数字典包含不可为空的类型为'System.Int32'”的参数srtCol的空条目 现在,ajax post最终会传入所有参数,如果我不尝试取消ajax请求,它就可以正常工作 但是,如果我在ajax()返回的XMLHtt

我使用jquery发布到MVC控制器操作,该操作返回一个信息表。该页面的用户通过单击各种链接触发此操作

如果用户决定快速连续单击这些链接,我想取消之前可能尚未完成的任何ajax请求

我发现,当我这样做时(尽管从客户端的POV来看这很好),我会在web应用程序上看到这样的错误

“参数字典包含不可为空的类型为'System.Int32'”的参数srtCol的空条目

现在,ajax post最终会传入所有参数,如果我不尝试取消ajax请求,它就可以正常工作

但是,如果我在ajax()返回的XMLHttpRequest对象上调用abort()来取消请求,则会从ASP.NETMVC中得到错误

例如:

//Cancel any pevious request
if (req)
{
    req.abort();
    req = null;
}

//Make new request
req = $.ajax({
    type: 'POST',
    url: "/Myapp/GetTbl",
    data: {srtCol: srt, view: viewID},
    success: OnSuccess,
    error: OnError,
    dataType: "html"
});
我注意到只有IE8才会发生这种情况。在FF中,这似乎不是一个问题

有人知道如何在IE8中取消ajax请求而不会导致MVC错误吗


感谢您的帮助。

IE可能会在中止之前将部分请求正文发送到服务器,从而为服务器提供足够的请求以开始处理,但不是它需要的所有参数。你可以通过查看IE在代理中的活动来检查这一点(比如)--如果你得到了部分请求,那么IE处理的
abort()
很糟糕。如果是这种情况,您可能希望让旧的AJAX请求完成,并阻止其OnSuccess执行任何操作,而不是中止它

编辑:


像现在一样保留对最新请求的引用,但不要中止它。相反,OnSuccess检查传递给它的请求对象是否与“最新请求”相同;如果它们不同,则另一个请求已经介入,并且通过了。

我怀疑您是正确的。但我不确定如何重写我的JS代码,以便对中止的请求忽略OnSuccess,而对未中止的请求运行OnSuccess。你能给我举个例子吗?
var req; // current/latest request

var OnSuccess = function(data, textStatus, XMLHttpRequest) {
    if (XMLHttpRequest != req) return;
    // latest request has succeeded
}

req = $.ajax(...);