Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用AJAX POST时“重定向到操作”是否不好?(ASP.NET)_Javascript_Jquery_Ajax_Asp.net Mvc - Fatal编程技术网

Javascript 使用AJAX POST时“重定向到操作”是否不好?(ASP.NET)

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返回后有更多的逻辑,您将无法执行任何操作,因为您刚刚重新加载了页面 这是在要求澄清该怎么

我是学习jQuery、Json和Ajax的新手。。我试图清楚地理解这些概念,但有点困难

我有一个ajax POST Delete方法正在运行,但我的教授要求我重构控制器中的代码,以提高整体性能

这是我在控制器中的删除

还有我的ajax电话

我的教授评论道 删除后ajax调用重新加载页面还是转到ajax?它看起来像是重新加载的。更改ajax中某个元素的颜色,以确认它进入ajax调用。这是不必要的,如果在ajax返回后有更多的逻辑,您将无法执行任何操作,因为您刚刚重新加载了页面

这是在要求澄清该怎么做之后,因为我不能完全理解这个问题

如果我只是返回视图而不是返回重定向到操作索引,它的性能会更好,并且能够解决教授所讨论的问题吗?

返回重定向到操作索引;返回HTTP状态302和URL,以便在您的案例中重定向主页/索引


由于您没有在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.");
}