如果我使用AJAX调用它,如何取消MVC操作?

时间:2016-02-18 20:10:49

标签: javascript ajax asp.net-mvc

我在一个视图上有一个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);
}

1 个答案:

答案 0 :(得分:1)

我认为你不能。向服务器发出请求后,您可以关闭浏览器,但仍会执行请求。

这只是一个想法:

1)调用者发出一个AJAX请求并提供一个唯一值(可能是一个guid)。

2)处理页面重新加载事件和关闭事件,并使用相同的唯一键发送新的AJAX请求,请求取消。

3)在服务器上执行的长进程任务应该检查一个标志,指示该任务已被取消。

您还可以使用WebSocket执行此类任务,以便服务器可以ping客户端(如“仍然活着”请求)。如果您使用的是.NET,则可以使用SignalR。

我希望它有所帮助,或者至少它可以解决你的问题。