Ajax 调用在运行控制器之前出错

Posted

技术标签:

【中文标题】Ajax 调用在运行控制器之前出错【英文标题】:Ajax call falls into error before running the controller 【发布时间】:2019-04-03 00:09:31 【问题描述】:

我有一个 ajax 调用在运行控制器之前就陷入了错误块。 奇怪的是,有时(在多次请求之后)它确实运行成功,但它没有将 cookie 保存在控制器中。

我认为这可能是 ajax 调用或一些权限错误。 AJAX 调用:

$('#loginAWGPE').on('click', function () 
    var cpfLogin = $('#cpfValidacao').val().replace(/[^\d]+/g, '');
    console.log(cpfLogin);
    console.log(urlOrigem + appPath + "Login/validaCPF");
    $.ajax(
        type: 'POST',
        url: urlOrigem + appPath + "Login/validaCPF",
        datatype: String,
        data: 
            cpf: cpfLogin
        ,
        success: function (teste) 
            console.log('dataS: ' + teste);
            if (teste = true) 
                window.location = urlOrigem + appPath + "ProjetoEletrico/Index";
             else 
                alert('CPF não cadastrado na Agência Virtual!');
            
        ,
        error: function (teste2) 
            console.log('dataE: ' + teste2);
            alert('Erro na execusão');
        
    );
);

-------控制器:

public JsonResult validaCPF(String cpf)
    
        if (String.IsNullOrEmpty(cpf))
        
            Response.StatusCode = (int)HttpStatusCode.Unauthorized;
            return Json(false);
        
        WebAPIPArameter id = new WebAPIPArameter();
        id.ParameterName = "id";
        id.ParameterValue = cpf;
        List<WebAPIPArameter> list = new List<WebAPIPArameter>();
        list.Add(id);
        Usuario userInfo = (Usuario)apiClientSistema.GetItem<Usuario>(serviceNameUserInfo, list);
        if (userInfo == null)
        
            return Json(false);
        
        else
        
            CultureInfo cult = new CultureInfo("pt-BR");
            String dataStr = userInfo.DTH_ULTIMO_ACESSO.ToString("dd/MM/yyyy HH:mm:ss", cult);
            HttpCookie cook = new HttpCookie("UserInfo");
            cook["cpfCnpj"] = userInfo.NUM_CPF_CNPJ_CLIENTE.ToString();
            cook["nomeCompleto"] = userInfo.NOM_CLIENTE;
            cook["dataAcesso"] = dataStr;
            cook["email"] = userInfo.END_EMAIL;
            cook.Expires = DateTime.Now.AddHours(4);
            Response.Cookies.Add(cook);
            //cookie de autenticacao
            FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
                                            1,
                                            cpf,  // Id do usuário é muito importante
                                            DateTime.Now,
                                            DateTime.Now.AddHours(4),
                                            true,   // Se você deixar true, o cookie ficará no PC do usuário
                                            "");
            HttpCookie cookieAuth = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(authTicket));
            Response.Cookies.Add(cookieAuth);
        
        Response.Redirect("~/ProjetoEletrico/Index");
        return Json(true);
    

【问题讨论】:

能否包含相关的控制器代码/路由信息? falling into error block 因为你有一个错误的 console.log,你应该看到错误是什么 - 我们不能 @John 我添加了控制器 你能把它改成console.log('dataE: ', teste2);(逗号,而不是+),这样它就不会尝试将teste2转换成字符串(这就是它返回“[object Object]”的原因) ? 好的,所以error 的第一个参数对于调试基本上是无用 ...试试error: function (teste2, error, exception) console.log(error); console.log(exception); 【参考方案1】:

我想通了。这是一个愚蠢的错误...... 我忘记了表单按钮中的“提交”,也忘记了 ajax 调用。

【讨论】:

以上是关于Ajax 调用在运行控制器之前出错的主要内容,如果未能解决你的问题,请参考以下文章

为 AJAX 调用准备 Vuex Store 数据的正确方法

如何使用 jQuery 的 ajax 方法调用局部视图

ASP.NET Core - 在没有Ajax的情况下调用javascript中的控制器方法

为啥在我的 HttpPost 方法 Ajax 调用中,控制器上的参数为空?

ActionFilter 不适用于 AJAX 调用

Laravel 5.4,AJAX 应该不会出错