我正在尝试使用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来自提琴手的结果:


  内容类型:application / json;字符集= utf-8
  
  [false,{“ UserName”:“ 1”,“ Password”:“ 2”,“ RememberMe”:false},[{“ Key”:“”,“ Errors”:[{“ Exception”:null,“ ErrorMessage “:”
  用户名或密码不正确。“}]}]]


Fiddler可以解析结果:



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

谢谢!

最佳答案

您无需在成功处理程序中调用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
                }
            });

10-04 16:37