Javascript 使用AJAX POST时“重定向到操作”是否不好?(ASP.NET)
我是学习jQuery、Json和Ajax的新手。。我试图清楚地理解这些概念,但有点困难 我有一个ajax POST Delete方法正在运行,但我的教授要求我重构控制器中的代码,以提高整体性能 这是我在控制器中的删除 还有我的ajax电话 我的教授评论道 删除后ajax调用重新加载页面还是转到ajax?它看起来像是重新加载的。更改ajax中某个元素的颜色,以确认它进入ajax调用。这是不必要的,如果在ajax返回后有更多的逻辑,您将无法执行任何操作,因为您刚刚重新加载了页面 这是在要求澄清该怎么做之后,因为我不能完全理解这个问题 如果我只是返回视图而不是返回重定向到操作索引,它的性能会更好,并且能够解决教授所讨论的问题吗?返回重定向到操作索引;返回HTTP状态302和URL,以便在您的案例中重定向主页/索引Javascript 使用AJAX POST时“重定向到操作”是否不好?(ASP.NET),javascript,jquery,ajax,asp.net-mvc,Javascript,Jquery,Ajax,Asp.net Mvc,我是学习jQuery、Json和Ajax的新手。。我试图清楚地理解这些概念,但有点困难 我有一个ajax POST Delete方法正在运行,但我的教授要求我重构控制器中的代码,以提高整体性能 这是我在控制器中的删除 还有我的ajax电话 我的教授评论道 删除后ajax调用重新加载页面还是转到ajax?它看起来像是重新加载的。更改ajax中某个元素的颜色,以确认它进入ajax调用。这是不必要的,如果在ajax返回后有更多的逻辑,您将无法执行任何操作,因为您刚刚重新加载了页面 这是在要求澄清该怎么
由于您没有在ajax处理程序中处理此HTTP状态,因此成功处理2XX代码和错误4XX和5XX代码,因此在客户端根本不会处理响应,您的教授是正确的。如果计划通过Ajax调用该操作方法,则不应使用RedirectToAction 相反,您需要返回JsonResult。比如说,
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(int id)
{
Course course = courseService.GetCourseByID(id);
courseService.DeleteCourse(id);
return Json("Course was deleted successfully.");
}
仅供参考:在某些罕见的情况下,如果您真的需要重定向到Ajax调用中的不同页面,您可以使用。听起来您的讲师不是在谈论您的服务器端代码,而是在谈论您的客户端代码。他要求您在JavaScript中对AJAX的回调进行一些可见的更改,以确认AJAX调用成功,而无需重新加载页面。因为如果页面重新加载,那么可见的更改将不再存在。抱歉,但我现在更困惑于客户端和服务器端方面。问题是我的ajax调用吗?客户端的ajax调用服务器->服务器响应重定向结果HTTP status 302->ajax处理程序不知道如何处理此响应我正在我的ajax中执行.empty.load“..”以在删除后自动刷新表。这会是一个问题吗?只要deleteConfixed方法返回JsonResult,这就不应该是一个问题。如果这是一个愚蠢的问题,我很抱歉,但我怎么知道它正在返回JsonResult呢?我的意思是删除正在工作,但我没有看到页面上的消息“课程已成功删除”,如果这是删除后我应该在页面上看到的。如果您想看到课程已成功删除。消息,您需要在success函数中添加一个参数。例如,success:function result{console.logresult;}这就是我的想法。知道了。非常感谢您的帮助和解释。
$('#dialog-box').on("click", '#confirm-del', function () {
var token = $('input[name="__RequestVerificationToken"]').val();
var data = { id: id, __RequestVerificationToken: token };
$.ajax({
type: "POST",
url: "@Url.Action("Delete","Course")",
data: data,
//ajaxasync: true,
success: function () {
$("#dialog").dialog("close");
$('div.table-content').empty().load('.table-content');
//console.log("success");
},
error: function () {
console.log("failed");
}
});
});
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(int id)
{
Course course = courseService.GetCourseByID(id);
courseService.DeleteCourse(id);
return Json("Course was deleted successfully.");
}