为什么在ajax请求上调用abort()会导致ASP.Net MVC(IE8)错误

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

如果用户决定快速连续点击一堆链接,我想取消任何以前没有完成的ajax请求。

我发现,当我这样做时(虽然从客户端的POV中可以看出它很好),但我会在Web应用程序中发现错误

"The parameters dictionary contains a null entry for parameter srtCol of non-nullable type 'System.Int32'"

现在,ajax文章会精确地传递所有参数,如果我不尝试取消ajax请求,它的工作原理就很好。

但是,如果我通过调用ajax()返回的XMLHttpRequest对象上的abort()来取消请求,那么它会在ASP.Net MVC中得到错误。

例:

//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的活动来检查它(如fiddler)---如果你得到了部分请求,那么IE正在处理abort() 。 如果是这种情况,您可能希望让旧的AJAX请求完成,并阻止它的OnSuccess执行任何操作,而不是中止它。

编辑:

var req; // current/latest request

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

req = $.ajax(...);

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

链接地址: http://www.djcxy.com/p/1021.html

上一篇: Why does calling abort() on ajax request cause error in ASP.Net MVC (IE8)

下一篇: Best practice to manage the path breadcrumbs in Spring without Web flow