在调用端点时,我需要澄清 jQuery Ajax 生命周期,在我的特定情况下是 ASP.NET MVC (Net core/Net 5) 应用程序。
我特别需要知道成功/错误事件链是如何工作的,以及一旦触发 http 调用,控件何时返回给 jquery。
让我们想象一个像这样的jquery ajax
postData = JSON.stringify({test: 1, anotherVariable : "YEEEE"});
$.ajax({
url: '@Url.Action("MyAspNetAction", "MyAspNetController")',
type: "POST",
contentType: 'application/json; charset=utf-8',
dataType: "json",
data: postData,
success: function (result) {
showMessage(result.responseText, result.success ? 'success' : 'error', 3000)
},
error: function (error) {
showMessage(result.responseText, 'success', 3000)
}
});
在服务器上,我有一个异步任务控制器,我们可以将其定义为:
public async Task<JsonResult> MyAspNetAction([FromBody] MyAspNetActionModel){
try{
await someLongAction();
return some jsonresult { success = true, responseText = "HELLO"}
}
catch(Exception ex)
{
return some jsonresult { success = false, responseText = "ERROR"}
}
}
它从 asp net 异步执行(我猜)。
现在,假设我在这个动作中做了各种危险的任务,比如操纵
HttpContext.Session["key"]
ViewData["Key"]
调用其他需要一些时间才能执行的异步内容(假设是 30 秒,以便提出最坏的情况。
这一切加在一起。
现在,什么时候 javascript 重新获得控制权以及什么时候成功???
我处理对了吗?
我的意思是,所有异步的东西都在发生(ajax 异步,mvc 操作是异步的等等。只有在我的 MVC 操作完成并获得结果后,jquery 操作才会成功?
或者 jquery ajax 设法调用我的操作这一事实将导致 HTTP 200(所以没关系/成功),它将忽略内部调用的所有代码,必须以另一种方式处理,以下 javascript 将是执行?
基本上我想知道我是否可以执行 MVC 操作中的所有代码,确保只有当操作完成所有代码时 ajax 才会进入成功/错误
和
如果 jquery ajax 之后的 javascript 将继续执行并且对 ajax 操作的控制将稍后返回