【问题标题】:Ajax success is not called after JsonResult在 JsonResult 之后不调用 Ajax 成功
【发布时间】: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"}

标签: c# jquery ajax asp.net-mvc-4


【解决方案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 属性,将其发布到您的问题中,我们可以查看它是否有效
猜你喜欢
  • 2013-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多