我在一个视图上有一个AJAX函数,它在我的一个控制器上调用一个Action来获取一个JSON对象。问题是创建对象需要一段时间。如果用户重新加载页面,则再次运行AJAX调用。据我所知,该操作仍在上一次请求中运行,但响应不再相关,因为新的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);
}
答案 0 :(得分:1)
我认为你不能。向服务器发出请求后,您可以关闭浏览器,但仍会执行请求。
这只是一个想法:
1)调用者发出一个AJAX请求并提供一个唯一值(可能是一个guid)。
2)处理页面重新加载事件和关闭事件,并使用相同的唯一键发送新的AJAX请求,请求取消。
3)在服务器上执行的长进程任务应该检查一个标志,指示该任务已被取消。
您还可以使用WebSocket执行此类任务,以便服务器可以ping客户端(如“仍然活着”请求)。如果您使用的是.NET,则可以使用SignalR。
我希望它有所帮助,或者至少它可以解决你的问题。