【发布时间】:2020-12-08 12:37:08
【问题描述】:
我发出 POST ajax 请求以执行操作并返回结果而不重新加载页面。
为此,我使用 JSON 结果,问题是当我的操作“foo.DoSyncAction(id)”需要一段时间才能执行时,返回的消息为空。
比如引发异常时,异常被捕获,但他的消息为空。
当没有抛出异常时也会发生同样的情况,“actionResult”为空。
如果我使用耗时较少的操作,则返回的消息不为 null 或为空。
并且在调试模式下不会发生,返回到我的页面的消息不为空。
我想我忘记了或者我做错了什么,但我不知道哪里出了问题。
[HttpPost]
public JsonResult SomeAction(int id)
{
try
{
Foo foo = new Foo();
var actionResult = foo.DoSyncAction(id);
return Json(new { ok = true, data = actionResult }, JsonRequestBehavior.AllowGet); ;
}
catch (Exception ex)
{
return Json(new { data = ex == null ? "null ex" : (string.IsNullOrEmpty(ex.Message) ? "this exception is empty" : ex.Message) }, JsonRequestBehavior.AllowGet);
}
}
我的 AJAX 查询:
$.ajax({
url: '@Url.Action("SomeAction", "MyController")',
dataType: 'json',
data: { id: myID },
type: 'POST',
success: function (response) {
if (response.ok) {
// When everything is ok
console.log(response.data);
} else {
// When an exception is thrown
console.log("An error occurred : " + response.data);
}
},
error: function (error) {
console.log("An error occurred : " + error.responseText);
}
});
这是一个类似情况的例子:dotnetfiddle.net/cG2L0u 我使用 Sagnalrac 示例等待 10 秒,然后我的问题就出现了。不再显示项目列表,并且 console.log 返回一个空字符串。 我正在使用带有 .NET 4.8 的 ASP MVC 5
【问题讨论】:
-
听起来您超出了客户端 AJAX 请求的请求超时时间 - 这是因为请求花费了太长时间而停止并且您没有请求正文(代码将继续在您的示例中的服务器上运行)。这是怎么回事?
-
浏览器实际发送的请求是什么?如果你在控制器中设置断点,它会被命中吗?
-
这可能有助于弄清楚:stackoverflow.com/questions/3543683/…
-
在你的 post 方法开始的地方打一个断点,观察 id 是否来自前端
-
感谢您的回答。我用断点试过了,效果很好。我检索 id,并将成功或异常消息返回给我的客户。我会尝试看看是否可以在 ajax 超时方面获得任何线索。
标签: c# jquery .net ajax asp.net-mvc