【发布时间】:2016-05-31 05:01:30
【问题描述】:
我在视图上有一个 AJAX 函数,它调用我的一个控制器上的 Action 来获取 JSON 对象。问题是创建对象需要一段时间。如果用户重新加载页面,则 AJAX 调用会再次运行。据我所知,该操作仍在从最后一个请求开始运行,但响应不再相关,因为新的 AJAX 调用正在等待新的响应。
我的问题是,如果用户离开调用它的视图,我该如何阻止该操作继续进行?
阿贾克斯:
$.ajax({
type: "get",
url: "/Alert/GetWallboardAlerts",
cache: false,
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (result) { ... }
});
控制器动作:
public ActionResult GetWallboardAlerts()
{
//...do long running stuff
//...still doing stuff when page reloaded or I navigate elsewhere
return Json(alertString, JsonRequestBehavior.AllowGet);
}
【问题讨论】:
-
如果用户离开调用它的视图,操作将继续,但浏览器不会等待响应,因此当操作完成时,它将被释放。
-
据我所知,你不能。至少没有一些我不推荐的花哨的线程编程。
-
如果你想终止请求,你可以试试这个:stackoverflow.com/a/446626/433234
-
@jasonwarford 但这会杀死 ajax 请求,而不是会继续运行的 GetWallboardAlerts()。
-
你可以把你的长动作放到一个新线程中,如果有新任务进来就中止它——像这样:stackoverflow.com/questions/4783865/…
标签: javascript ajax asp.net-mvc