在 JsonResult 之后不调用 Ajax 成功

Posted

技术标签:

【中文标题】在 JsonResult 之后不调用 Ajax 成功【英文标题】:Ajax success is not called after JsonResult 【发布时间】:2019-01-16 15:56:43 【问题描述】:

我正在尝试使用Ajax 将记录添加到数据库,如果成功,则从JsonResult 取回数据,以便进一步调用该函数,但不知何故总是陷入错误:parseerror。但是,记录是插入到 DB 中的。

这是我的发帖方法:

$("body").on("click", "#btnAdd", function () 
        var txtTermName = $("#txtTermsName");
        var txtAlternativeTerms = $("#txtAlternativeTerms");
        $.ajax(
            type: "POST",
            url: "/Administration/AddTerm",
            data: 'name: "' + txtTermName.val() + '", alternatives: "' + txtAlternativeTerms.val() + '" ',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (r) 
                var row = $("#tblTerms tr:last-child");
                if ($("#tblTerms tr:last-child span").eq(0).html() != " ") 
                    row = row.clone();
                
                AppendRow(row, r.Name, r.Alternatives);
                txtTermName.val("");
                txtAlternativeTerms.val("");
            ,
            error: function(textStatus, errorThrown)  
                alert("Error: " + errorThrown); 
                 
        );
    );

还有我的控制器JsonResult

[HttpPost]
public JsonResult AddTerm(Term term)

    this.SaveTerm(term);
    return Json(term);

欢迎提出任何意见或建议

更新

Json(term).Data内容:

-       Json(term).Data Models.Term   object Models.Term
+       ChangedBy   
        Description null    string
        ID  27  int
        Inactive    false   bool
        Name    "sdfgdsgf"  string
        SynonymsList    "sdfgdsgfdsgsdgf"   string
+       Updated 09.08.2018 10:00:50   System.DateTime

【问题讨论】:

错误是什么? 浏览器网络选项卡告诉 POST 正在返回什么? 可能不相关,但这是生成数据的一种丑陋脆弱的方式 - 只需使用 data: name: txtTermName.val(), alternatives: txtAlternativeTerms.val() , and remove the contentType` 选项 @tolik 如果你曾经看到过[object Object],那么它就是浏览器隐藏了它的实际情况(很可能你已经完成了alert(textStatus) 或者更糟糕的是alert("textStatus: " + textStatus)。你不能合并带有对象的字符串,所以总是console.log("textStatus", textStatus)(注意逗号,而不是+ @mjwills,基本上状态是:200 OKterm.GetType() = Name = "Term" FullName = "AppNS.Models.Term"。如果我这样做Json(term).GetType() ,那么显然Name = "JsonResult" FullName = "System.Web.Mvc.JsonResult" 【参考方案1】:

看起来在您的数据库保存调用之后某处调用了异常(我认为 SaveTerm 方法不仅仅保存项目?)导致返回错误页面而不是 JSON - 因此出现解析错误。

尝试将 Try Catch 添加到操作中,我认为 SaveTerm 方法会捕获异常。

【讨论】:

和/或单步执行代码以确保它到达return Json(也可能是 json 序列化失败) @Milney,试图包围 this.SaveTerm(term);使用 try-catch,但没有问题。 @tolik 嗯,您的模型类型中有任何 DateTime 类型吗?可能是由于区域设置导致日期转换不正确 @freedomn-m,你说的逐步通过是什么意思?我在 return 上放了一个断点,返回结果的 Data 属性对应于 term @tolid JSON 结果应该有一个带有实际 JSON 的 value 属性,将其发布到您的问题中,我们可以查看它是否有效

以上是关于在 JsonResult 之后不调用 Ajax 成功的主要内容,如果未能解决你的问题,请参考以下文章

ActionFilter 不适用于 AJAX 调用

jquery-ajax请求.NET MVC 后台

[.NET MVC] JsonResult的最大长度

无法将 .net 5 mvc 中的 jsonresult 中的两个参数返回到 ajax

尝试使用 jQuery ajax 和 MVC 显示 JSONResult 时出现内部服务器错误 #500

AJAX 将 JavaScript 字符串数组发布到 JsonResult 作为 List<string> 总是返回 Null?