use*_*867 7 ajax asp.net-mvc jquery
我使用jquery发布到返回信息表的MVC控制器动作.页面的用户通过单击各种链接来触发此操作.
如果用户决定快速连续点击一堆这些链接,我想取消任何以前可能尚未完成的ajax请求.
我发现当我这样做时(尽管客户端的POV很好)我会在Web应用程序上遇到错误
"The parameters dictionary contains a null entry for parameter srtCol of non-nullable type 'System.Int32'"
现在ajax帖子确实传递了所有参数,如果我不尝试取消ajax请求它就可以了.
但是如果我通过在XMLHttpRequest对象上调用abort()来取消请求,ajax()在完成之前返回,我从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"
});
Run Code Online (Sandbox Code Playgroud)
我注意到这只发生在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(...);
Run Code Online (Sandbox Code Playgroud)
像现在一样保留对最新请求的引用,但不要中止它。相反,OnSuccess 检查传递给它的请求对象是否与“最新请求”相同;如果它们不同,则表明另一个请求已介入,并且该请求会通过。
| 归档时间: |
|
| 查看次数: |
1630 次 |
| 最近记录: |