【问题标题】:jQuery.parseJSON not working for JsonResult from MVC controller actionjQuery.parseJSON 不适用于 MVC 控制器操作中的 JsonResult
【发布时间】:2012-02-09 00:21:49
【问题描述】:

我正在尝试使用 jQuery.parseJSON 从 MVC3 控制器操作中解析出返回值。

控制器:

    [HttpPost]
    public JsonResult LogOn(LogOnModel model, string returnUrl)
    {
        .. do stuff ..

        if (errors.Count() < 0)
        {
            return Json(new object[] { true, model, errors });

        }

        return Json(new object[] { false, model, errors });
    }

jQuery:

$.ajax({
                url: form.attr('action'),
                type: "POST",
                dataType: "json",
                data: form.serialize(),
                success: function (data) {
                    var test = jQuery.parseJSON(data);                      
                }   
            });

提琴手的Json结果:

内容类型:应用程序/json;字符集=utf-8

[false,{"UserName":"1","Password":"2","RememberMe":false},[{"Key":"","Errors":[{"Exception":null "错误消息":" 提供的用户名或密码不正确。"}]}]]

Fiddler 可以解析结果:

对 jQuery.parseJSON 的调用返回 null。 我的问题是,如何将 json 返回值解析为对象?

谢谢!

【问题讨论】:

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


    【解决方案1】:

    您不需要在成功处理程序中调用 parseJSON,因为 ajax 已经将 JSON 结果解析(它会自动执行此操作,因为您指定了 dataType:'json')到您的数组中。

    但是,我建议返回某种结果对象(无论是在 C# 中创建实际类还是使用匿名类型)。

        [HttpPost]
        public JsonResult LogOn(LogOnModel model, string returnUrl)
        {
            .. do stuff ..
    
            if (errors.Count() < 0)
            {
                return Json(new { success=true, model, errors });
    
            }
    
            return Json(new { success=false, model, errors });
        }
    

    在客户端

    $.ajax({
                    url: form.attr('action'),
                    type: "POST",
                    dataType: "json",
                    data: form.serialize(),
                    success: function (result) {
                        alert(result.success);
                        // also have result.model and result.errors                      
                    }   
                });
    

    【讨论】:

    • jQuery.parseJSON 调用仍然返回 null。
    • 啊...您不需要解析JSON,因为data 已经是一个对象。 ajax 将尝试解析 JSON 结果,因为您将类型 dataType 指定为 json。 parseJSON 需要一个字符串,而你给它一个对象,因此返回 null。没仔细看你的问题,不好意思。我会修改的。
    • 我明白了;让我玩一下。
    【解决方案2】:

    您实际上是在返回一个对象数组,并且应该在成功函数中像这样访问它们:

    var booleanValue = data[0];
    
    var yourModel = data[1];
    
    var yourErrors = data[2];
    

    我确实给@HackedByChinese 投了赞成票,因为最终命名属性可能是更好的方法。这将如何解决您当前的问题。

    【讨论】:

    • @rboarman hmmmm...这是在成功方法中读取 JsonResult Json(new object[] { false, model, errors }) 的正确语法。可能是表格有问题。您为什么不尝试将 $.ajax() 调用更改为简单的 GET 来一次解决问题。
    • @rboarman 我猜到你了……你在$.ajax() 调用中使用的form 变量真的存在吗?也许你有一个你没有注意到的 JS 错误。您能否确保在获取文档中第一个表单的$.ajax() 调用之前已声明var form = $("form:first");
    猜你喜欢
    • 1970-01-01
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    • 2017-02-17
    • 1970-01-01
    • 2017-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多