虽然JSON.parse(data)在firefox中显示“b is undefined”

时间:2015-03-07 17:45:08

标签: jquery json asp.net-mvc-4

我的控制器,将json对象发送到View。

 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);
                }
            });

我尝试了很多选择,但都是徒劳的..

任何帮助......?

1 个答案:

答案 0 :(得分:0)

您不必使用JavaScriptSerializer,因为当您使用return Json(FormsList,JsonRequestBehavior.AllowGet);时,它会自动序列化您的列表。但您的主要问题是,当您使用dataType: 'json'时,响应会自动转换为JSON,因此您不必使用var rs = JSON.parse(data);

如果我总结一下:

控制器:

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

        return Json(FormsList,JsonRequestBehavior.AllowGet);

    }

的Ajax:

$.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);
                }
            });
  • 顺便说一下,将FormsList初始化为null可能会导致一些问题,以防您在控制器中出现异常 - 您将序列化null并根据JQuery ajax帮助页面:
  

以严格的方式解析JSON数据;任何格式错误的JSON都是   拒绝并抛出一个解析错误。截至jQuery 1.9,一个空的   回应也被拒绝;服务器应返回null响应   或{}代替。

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

return Json(FormsList,JsonRequestBehavior.AllowGet);