为什么无法将null返回到$ .getJSON()函数?

时间:2015-04-01 12:40:20

标签: jquery json asp.net-mvc

给出以下控制器方法

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"

根据specification

  
      
  1.      

    JSON值必须是对象,数组,数字或字符串,或以下三个文字名称之一:   false null true

  2.   

如果JSON值可以是null,为什么else块在返回值为null时永远不会被命中,这是Json()方法失败的原因或者,当返回null方法时,getJSON()值是否无法正确表示为JSON?

注意,当控制器方法为$.ajax()时,使用dataType:而未指定else将会触发return null;块(我假设因为返回值被解释为除了{{1}}之外的其他值JSON)。

注意:使用MVC-4和jquery-1.9.1

1 个答案:

答案 0 :(得分:0)

因为return Json(null, JsonRequestBehavior.AllowGet)将返回空字符串。空字符串不是有效的json字符串。所以$.getJSON会失败。您可以使用javascript try JSON.parse("")它会抛出错误。