在 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 OK
和term.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 成功的主要内容,如果未能解决你的问题,请参考以下文章
无法将 .net 5 mvc 中的 jsonresult 中的两个参数返回到 ajax
尝试使用 jQuery ajax 和 MVC 显示 JSONResult 时出现内部服务器错误 #500
AJAX 将 JavaScript 字符串数组发布到 JsonResult 作为 List<string> 总是返回 Null?