为啥我对控制器方法的简单 ajax 调用不起作用?

Posted

技术标签:

【中文标题】为啥我对控制器方法的简单 ajax 调用不起作用?【英文标题】:Why my simple ajax call to a controller method is not working?为什么我对控制器方法的简单 ajax 调用不起作用? 【发布时间】:2021-08-02 18:43:04 【问题描述】:

我刚开始使用 ASP .NET MVC。 我正在尝试使用 jQuery ajax 调用 POST 操作方法,如下所示,但我的 Controller 方法没有被命中。 下面的js函数由按钮的onclick()调用。

function ValidateLogin() 
    var dat = ;
    dat.Username = $("#username_input").val();
    dat.Password = $("#password_input").val();
    dat.PreviousActionName = '';
    if (dat.Password != '' && dat.Username != '') 
        $.ajax(
            url: '/Login/ValidateLogin',        //Tried '@Url.Action("ValidateLogin", "Login")' as well
            type: 'POST',
            data: JSON.stringify(dat),
            contentType: 'application/json',
            dataType: 'json',
            success: function () 
                alert("Success!");
            ,
            error: function (xhr, status, error) 
                var err = xhr.responseText;
                alert("Failed");
            
        );
    

这是我的登录模型

public class LoginModel
    
        public String Username  get; set; 
        public String Password  get; set; 
        public String PreviousActionName  get; set; 
    

和登录控制器:

public class LoginController : Controller
    
        // GET: Login
        [HttpGet]
        public ActionResult Login()
        
            return View();
        
        [HttpPost]
        public ActionResult ValidateLogin(LoginModel loginModel)
        
            String Username = loginModel.Username;
            String Password = loginModel.Password;
            return View("Login");
        
    

注意:我在 IIS 中本地托管此项目,名称为“客户端”。 所以初始 URL 将是 http://localhost/Client 当我在 AJAX url 中使用“/Login/ValidateLogin”时,最终 URL 是 http://localhost/Login/ValidateLogin,在这种情况下,我在浏览器控制台中找不到 http://localhost/Login/ValidateLogin。所以我将 ajax 中的 url 更改为“Client/Login/ValidateLogin”。现在它只是ajax中的错误函数。

如果有帮助,这是我的 RouteConfig 类:

public class RouteConfig
    
        public static void RegisterRoutes(RouteCollection routes)
        
            routes.IgnoreRoute("resource.axd/*pathInfo");
            routes.MapMvcAttributeRoutes();
            routes.MapRoute(
                name: "Default",
                url: "controller/action/id",
                defaults: new  controller = "Login", action = "Login", id = UrlParameter.Optional 
            );
        
    

我做错了什么。请帮忙! 提前致谢。

【问题讨论】:

“现在它只是 ajax 中的错误函数。” - 如果你检查它的参数,“错误函数” 可能会告诉你问题而不是仅仅提醒“失败”。 @Andreas 我在浏览器中调试过。错误函数的所有参数都是'undefined'。 如果 jQuery 触发了error 回调,那么它们都不会是undefined 对不起,我该怎么做? 【参考方案1】:

试试这个语法

$.ajax(
            url: '/Client/Login/ValidateLogin',        
            type: 'POST',
            data: dat,
            success: function (result)  
               ///  $('#result').html(result);
                alert("Success!");
            ,
            error: function (xhr, status, error) 
                var err = xhr.responseText;
                alert(err);
            
        );

当你使用 Ajax 时,你必须使用 div 和 partialview 而不是 view 来返回

【讨论】:

感谢您的回答。我只将 url 更改为“Client/Login/ValidateLogin”。现在我的 post 方法受到了打击,但我仍然收到来自 ajax 错误的 Failed 警报。我会按照你的建议使用 partialview。 你必须尝试使用​​整个代码,而不仅仅是更改 url 我已经尝试过了,现在我从控制器方法返回了 ContentResult,并且在 ajax 的成功函数中,我正在导航到我想要的位置。一直以来我都看不到我在 Success 函数中除了 alert 之外没有写任何东西。 控制器中的 ajax 调用现在工作了吗? 我休息了一下。是的,ajax 调用运行良好,仅在 chrome 中。在 Firefox 中,调用了控制器 POST 方法,但我仍然收到错误警报。我检查了浏览器工具并检查了网络部分的响应。状态为 200,正常。但在此之后,我在浏览器控制台中得到了一些以 abort 开头的 JSON 日志。事件侦听器断点日志已启用。 JSON登录控制台详情img

以上是关于为啥我对控制器方法的简单 ajax 调用不起作用?的主要内容,如果未能解决你的问题,请参考以下文章