给出以下控制器方法
public ActionResult TestJsonResult()
{
return Json(true, JsonRequestBehavior.AllowGet);
// return Json(null, JsonRequestBehavior.AllowGet);
// return null;
}
和客户端脚本
var url = '@Url.Action("TestJsonResult", "Test")';
$.getJSON(url, function (result) {
if (result) {
console.log('returned a result');
} else {
console.log('returned null'); // this is never hit
}
}).fail(function (result) {
console.log('failed'); // this is hit for return Json(null); and return null;
// result is status 200 OK
});
然后3个返回值选项的输出为
return Json(true, JsonRequestBehavior.AllowGet); // outputs "returned a result"
return Json(null, JsonRequestBehavior.AllowGet); // outputs "failed"
return null; // outputs "failed"
- 醇>
值
JSON值必须是对象,数组,数字或字符串,或以下三个文字名称之一: false null true
如果JSON值可以是null
,为什么else
块在返回值为null
时永远不会被命中,这是Json()方法失败的原因或者,当返回null
方法时,getJSON()
值是否无法正确表示为JSON?
注意,当控制器方法为$.ajax()
时,使用dataType:
而未指定else
将会触发return null;
块(我假设因为返回值被解释为除了{{1}}之外的其他值JSON)。
注意:使用MVC-4和jquery-1.9.1
答案 0 :(得分:0)
因为return Json(null, JsonRequestBehavior.AllowGet)
将返回空字符串。空字符串不是有效的json字符串。所以$.getJSON
会失败。您可以使用javascript try JSON.parse("")
它会抛出错误。