1

我的场景:

我的 .getJson 方法在这个骨架中。

   $.getJSON(url, { /*data*/ },

                          function (result) {                           
                                 /*Action BLOCK*/    
                                 if(result != null)
                                 { //Block 1 }
                                 else
                                 { //Block2 }
                            }
}

我的疑问:

这是我在控制器中的返回语句。

情况1 :

 return Json(masterAccounts, JsonRequestBehavior.AllowGet)

现在如果masterAccountsnull,那么 getJSON 根本不会进入动作块。虽然状态显示 200 OK,但在响应选项卡中,它显示为无响应显示 在此处输入图像描述

案例2:

  return Json(masterAccounts??new List<Account>(), JsonRequestBehavior.AllowGet);

现在,一切正常。在响应选项卡中,我得到了 [] 的预期。

我的问题: getJson 的 Action 块是否会执行从服务器返回的空值? 我试过这个链接。http://api.jquery.com/jQuery.getJSON/但我没有看到这样的条件。

在 Mozilla 中,我也有同样的效果。控件未进入操作块内。

4

2 回答 2

1

只要您从服务器获得 200,它就会进入您的区块。看看文档:

jQuery.getJSON( url [, data ] [, success(data, textStatus, jqXHR) ] )

success(data, textStatus, jqXHR) 类型:Function() 请求成功时执行的回调函数。

执行回调的唯一要求是请求成功。返回的数据可以是空的 JSON,它不会改变您使用 HTTP 200 响应的事实,这意味着请求做了它应该做的事情。它适用于案例 2 的原因是因为您说如果 masterAccount 为空(它是)实例化一个新的空列表。案例 1 只是发送 null 并且它不是有效的 JSON,因此它不会触发成功回调。

如果要正确处理错误,则需要使用错误代码对应的HttpStatusCode枚举:

Response.StatusCode = (int)HttpStatusCode.BadRequest;
actionResult = this.Content("Why it failed");
return actionResult;

要处理错误客户端,您需要使用来自 JQuery.Ajax() 的错误回调(从而替换 getJson)。

于 2013-07-12T08:30:59.487 回答
1

好的,我试着自己做你的例子,这就是我所拥有的:

家庭控制器.cs

    public JsonResult GetJSON()
    {
        var t = new { a = "1", b = new int[] { 5, 6, 7 } };

        //return Json(t, JsonRequestBehavior.AllowGet);
        return Json(null, JsonRequestBehavior.AllowGet);
    }

查看.cshtml

<script src="~/Scripts/jquery-1.8.2.min.js" type="text/javascript"></script>
<script>
    $.getJSON('/home/getjson', {}, function (result) {
        if (result != null) {
            console.log('result != null');
            console.log(result);
        }
        else {
            console.log('result == null');
            console.log(result);
        }
    });
</script>

结果

在此处输入图像描述 在此处输入图像描述

我对条件和 Json 结果没有任何问题 - 每个块都已执行。

如果它可以帮助你,我使用 VS 2012、MVC 4、jQuery 1.8.2

于 2013-07-12T08:39:04.420 回答