Jquery 而JSON.parse(数据)在firefox中显示“b未定义”

Jquery 而JSON.parse(数据)在firefox中显示“b未定义”,jquery,json,asp.net-mvc-4,Jquery,Json,Asp.net Mvc 4,我的控制器,将json对象发送到视图 public ActionResult GetFormsByCategory(string ParentFormCategoryID) { JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); List<Forms> FormsList=null; try {

我的控制器,将json对象发送到视图

 public ActionResult GetFormsByCategory(string ParentFormCategoryID)
    {
        JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
        List<Forms> FormsList=null;
        try
        {
            FormsList = some data;
        }
        catch (Exception ep)
        {
            //error log
        }

        return Json(javaScriptSerializer.Serialize(FormsList),JsonRequestBehavior.AllowGet);

    }
我的ajax调用很成功,但是在json对象上运行时,它显示b是未定义的

    $.ajax({
                url: '.url', //Target URL for JSON file
                contentType: 'application/json; charset=utf-8',
                type: 'POST',
                dataType: 'json',
                async: false,
                success: function (data) {
                    var rs = JSON.parse(data);
                    var FormList = "<ul style='list-style:none;display:block;' class='sub-list-forms'>";
                    $.each((rs), function (FormID, ViewName) {
                        //alert(ViewName);
                        FormList += "<li id='" + FormID + "'>" + ViewName + "</li><li>Reports</li>";
                    });
                    FormList += "</ul>";
                    $(this).append(FormList);
                },
                error: function (xhr, status) {
                    console.log(status);
                }
            });
我尝试了许多选择,但都没有成功


任何帮助…?

首先,您不必使用JavaScriptSerializer,因为当您使用return JsonFormsList时,JsonRequestBehavior.AllowGet;它将自动序列化您的列表。但这里的主要问题是,当您使用数据类型:“json”时,响应会自动转换为json,因此您不必使用var rs=json.parsedata

如果我总结一下:

控制器:

    public ActionResult GetFormsByCategory(string ParentFormCategoryID)
    {
        List<Forms> FormsList=null;
        try
        {
            FormsList = some data;
        }
        catch (Exception ep)
        {
            //error log
        }

        return Json(FormsList,JsonRequestBehavior.AllowGet);

    }
阿贾克斯:

顺便说一下,将FormsList初始化为null也可能会导致一些问题,如果控制器中出现异常,您将序列化null,根据JQuery ajax帮助页面: JSON数据被严格解析;任何格式错误的JSON都是 拒绝,并引发分析错误。从jQuery1.9开始,一个空的 答复也被拒绝;服务器应返回null的响应 或者{}

因此,在这种情况下,最好返回null,而不是

返回JsonFormsList、JsonRequestBehavior.AllowGet

$.ajax({
                url: '.url', //Target URL for JSON file
                contentType: 'application/json; charset=utf-8',
                type: 'POST',
                dataType: 'json',
                async: false,
                success: function (data) {

                    var FormList = "<ul style='list-style:none;display:block;' class='sub-list-forms'>";
                    $.each((data), function (FormID, ViewName) {
                        //alert(ViewName);
                        FormList += "<li id='" + FormID + "'>" + ViewName + "</li><li>Reports</li>";
                    });
                    FormList += "</ul>";
                    $(this).append(FormList);
                },
                error: function (xhr, status) {
                    console.log(status);
                }
            });