gpt4 book ai didi

jquery - MVC 4.5 异步 Ajax 调用不起作用

转载 作者:行者123 更新时间:2023-12-03 22:56:28 25 4
gpt4 key购买 nike

我在已转换为新异步方法的 Controller 上运行缓慢。它现在运行得更快,但是任何对它的 jQuery Ajax 调用都会返回以下字符串,

System.Threading.Tasks.Task`1[System.Web.Mvc.ActionResult]

而不是等待异步完成。

我在这里做错了什么?我已经遵循了我能找到的每一个例子,这并不是火箭科学的实现。

基本上遵循了该视频中概述的内容

http://channel9.msdn.com/Events/TechDays/Techdays-2012-the-Netherlands/2287

还有这个链接

http://www.asp.net/mvc/tutorials/mvc-4/using-asynchronous-methods-in-aspnet-mvc-4#CreatingAsynchGizmos

我知道异步不会更改 HTTP,但我期望的是长时间运行的 Ajax 调用在后台工作,然后在完成时将结果返回给用户。这将释放服务器来处理额外的 ajax 调用,而不是阻止它们。

更新:

这是 JavaScript 代码

function doWork(options){
return $.ajax("/getData", {
contentType: 'text/json',
async: true,
success: $.proxy(options.callback, options.scope),
error: function (jqXHR, textStatus, error) {
options.callback.apply(options.scope, [error, textStatus, jqXHR]);
}
});
}

这是我在 C# 中的 Controller 操作

[HttpGet]
[AsyncTimeout(60000)]
public async Task<ActionResult> GetData()
{
RestResponse<Data> response = new RestResponse<Data>();

try
{
Data result = null;

await Task.Factory.StartNew(() =>
{
result = ServerImpl.RetrieveData();
});

response.Value = result;
response.HttpStatusCode = 200;
}
catch (Exception ex)
{
response.HttpStatusCode = 500;
response.Value = null;
}

return Json(response, JsonRequestBehavior.AllowGet);
}

最佳答案

问题是您的服务器端操作使用 ASP.NET Session,其特点是不是线程安全的。因此,ASP.NET 将来自同一 session 的并行请求排队并按顺序执行它们。依赖 session 的 RESTful API 是一个非常糟糕的设计,恕我直言,应该重新架构,使其不依赖于状态。

关于jquery - MVC 4.5 异步 Ajax 调用不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16595838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com