为什么在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