2012-02-09 82 views
4

我想用jQuery.parseJSON解析出MVC3控制器操作的返回值。jQuery.parseJSON不适用于来自MVC控制器操作的JsonResult

控制器:

[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; charset = utf-8

[false,{“UserName”:“1”,“Password”:“2”,“RememberMe”:false},[{“Key”:“”,“Errors” { “异常”:空 “的ErrorMessage”: “提供的 用户名或密码不正确。”}]}]]

提琴手可以解析的结果:

enter image description here

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

谢谢!

回答

6

您不需要在您的成功处理程序中调用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      
       } 
      }); 
+0

jQuery.parseJSON调用仍然返回null。 – rboarman 2012-02-09 00:46:30

+0

啊......你不需要parseJSON,因为'data'已经是一个对象了。 'ajax'将尝试解析JSON结果,因为您将类型dataType指定为json。 parseJSON需要一个字符串,你给它一个对象,因此返回null。我没有仔细注意你的问题,对不起。我会修改。 – HackedByChinese 2012-02-09 00:50:14

+0

我明白了;让我玩这一点。 – rboarman 2012-02-09 00:52:45

2

你实际上是返回对象的数组,他们shoould这样的成功函数访问:

var booleanValue = data[0]; 

var yourModel = data[1]; 

var yourErrors = data[2]; 

我没有给@HackedByChinese因为命名这些属性可能是一个更好的方式来进行最终的投票。 Howvbere这将解决你的眼前的问题。

+0

我试过这些变化;没爱。 – rboarman 2012-02-09 00:42:55

+0

@rboarman hmmmm ...这是在你的成功方法中阅读你的JsonResult Json(new object [] {false,model,errors})的正确语法。也许这个表单有问题。为什么不尝试将'$ .ajax()'调用改为简单的GET,而不是一次一步地解决问题。 – Craig 2012-02-09 00:55:06

+0

@rboarman我对你有个猜测......在'$ .ajax()'调用中使用的'form'变量实际上是否存在?也许你有一个你没注意到的JS错误。你能否确定你已经在获得文档中的第一个表单的'$ .ajax()'调用之前声明了'var form = $(“form:first”);''。 – Craig 2012-02-09 01:01:38

相关问题