0

在调用端点时,我需要澄清 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 操作的控制将稍后返回

4

1 回答 1

0

HTTP 请求上的客户端和服务器独立工作。

  1. 客户端发出请求。
  2. 服务器处理请求并发送响应。
  3. 客户端收到响应。

每一端都可以在任何架构上运行,如果可能,客户端可以在 2 期间阻塞或在 2 期间异步等待 3。

服务器 (2) 可以是同步的或异步的,但它是按顺序执行的:

  1. 接收请求。
  2. 处理请求。
  3. 发送响应。

关于 ASP.NET,您不应该同时使用与 HTTP 相关的组件或视图组件。

您的操作方法应该:

  1. 从 HTTP 收集数据(模型绑定和其他数据)。
  2. 调用处理请求所需的任何模型/服务。
  3. 生成响应(视图或任何其他响应类型)。
于 2021-06-25T08:20:55.947 回答